我有一个返回如下的方法,
return new { a, b, c, d};
方法定义为public object GetValues();
调用此方法后如何访问这些变量a,b,c,d?
答案 0 :(得分:7)
两个选项:
使用动态类型,只要您在同一个程序集中使用它:
dynamic values = GetValues();
var a = values.a; //etc
直接使用反射;生成的类型将具有名为a
,b
,c
和d
或者,如果您可能将方法更改为不使用匿名类型,请执行此操作。 (您可能无法根据上下文更改方法的签名,但即使这样,您仍然可以使用调用代码。)
答案 1 :(得分:4)
如果您将其分配到dynamic
,则可以将属性输出(请继续阅读,不要使用此代码):
dynamic d = YourMethodReturningAnonymousType();
var a = d.a;
请注意,您正在失去类型安全性,这是C#等类型安全语言的关键方面之一。我的建议:永远不要跨越方法的边界使用匿名类型。改为创建一个类并将其传递出去。
答案 2 :(得分:2)
您无法执行此操作,因为您必须返回键入为object
的匿名对象(即System.Object
)。
选项:
Dictionary<TKey, TValue>
(如果您想根据某些特定条件返回未知数量的参数,最佳选择)。例如:`new Dictionary {{&#34; a&#34;,1},{&#34; b&#34;,2}}; Dictionary<TKey, TValue>
建议相同,但由于元组项目为Item1
,ItemN
,您已失去为每个返回值指定名称的机会。例如:Tuple.Create(1, 2);
dynamic
以避免输入引用,因为C#是一种强类型语言)。答案 3 :(得分:1)
您可以使用动态或反射
dynamic obj=GetValues();
var a=obj.a;
或
object obj=GetValues();
var val_a=obj.GetType().GetProperty("a").GetValue(obj, null);