您使用匿名对象作为列表中的项目。匿名对象被设计为在单个方法的范围内使用,而不是暴露给其他方法。这样做是可能的,但很困难并且会产生很多问题。
从根本上看来,您要做的只是从您的方法中返回两个对象。您遇到了只能返回一个对象的事实,因此您正试图解决这个问题。您的直觉是将这些项目放入列表并返回。您进一步决定将对象放入匿名对象中,然后再将它们放入列表中。为了使用更标准的编码约定来解决这个问题,我们需要退出。首先,您不应该List
在这种情况下使用 a 。
您想创建一些可以保留这两个对象的类型;它应该有两个属性,每个对象一个。如果你愿意,你可以自己制作,如果有一个逻辑“类型”代表这两种结构。如果这真的没有意义,并且您认为在这种情况下不值得付出努力,您可以使用现有的通用持有者,称为Tuple
.
public Tuple<StructTypeA, StructTypeB> myFunction()
{
StructTypeA myStructA = new StructTypeA();
StructTypeB myStructB = new StructTypeB();
return Tuple.Create(myStructA , myStructB);
}
现在从调用者的角度来看,我们知道我们得到了一个Tuple
有两个项目的 a,第一个是 type StructTypeA
,第二个是 type StructTypeB
。
var returnValues = myFunction();
var myStr = returnValues.Item1.sString1