你能回复一个匿名的结构吗?

时间:2016-03-16 13:47:57

标签: c# .net-4.5

这个答案描述了构建一个匿名结构'在C#中:Is there an equivalent C# syntax for C's inline anonymous struct definition?

var x = new { SomeField = 1, SomeOtherField = "Two" };

从方法中返回它是否有效以避免必须明确定义结构?对该答案的评论说不,但那是2011年......

2 个答案:

答案 0 :(得分:6)

那不是struct,它是C#中的Anonymous Type(编译器实际上是class实现的)。匿名类型在本地范围内声明,并且您不能将其作为C#中的强类型类传递,因为它是编译器生成的类。您可以选择使用objectdynamic作为返回类型,但仍然会丢失基础类型。

总结一下你的问题,答案很简单,而不是你希望它的工作方式"。

答案 1 :(得分:3)

MSDN说:

  

匿名类型是直接从object派生的类类型,不能转换为除object之外的任何类型。尽管您的应用程序无法访问它,但编译器为每个匿名类型提供了一个名称。从公共语言运行库的角度来看,匿名类型与任何其他引用类型没有区别。

所以你可以将它作为object返回,但之后你不能对它们做太多的事情,除非你使用反射或动态。

如果您的真实意图要返回多个值,请使用Tuple<...>类型:

return Tuple.Create<int, string>(1, "Two");