如何从返回的匿名类型中获取值

时间:2013-11-01 14:40:51

标签: c# anonymous-types return-type

我有一个方法,它返回抽象类

    public static object CurrentInfo()
    {
        // some code here

        return new
        {
            URL = "www.mydomain.com",
            User = "Jack",
            Age = 20
        };
     }

当我使用该方法时,我获得了一个抽象类结果,因此我将其带入 object (或 var )类型:

 object obj = MyClass.CurrentInfo();
 //var obj = MyClass.CurrentInfo(); // I also tried that

我无法从 obj 网址年龄用户 >对象。如果我尝试以下操作会导致错误。

 string myUrl = obj.URL // the same form Age and User

我应该接受吗?但到了什么......?我想排除创建新STRUCT的方式。

3 个答案:

答案 0 :(得分:5)

创建一个具有这些属性的类,以便您可以正确访问它们,然后返回对象可以是强类型类而不是匿名类。这样您就可以访问对象的属性。

,例如

public class Info
{
   public string URL {get; set;}
   public string User {get; set;}
   public int Age {get; set;}
}

public static Info CurrentInfo()
    {
        // some code here

        return new Info()
        {
            URL = "www.mydomain.com",
            User = "Jack",
            Age = 20
        };
     }

答案 1 :(得分:1)

如果你想保留匿名类型,如上所示使其难以使用,那么这里是一个处理返回对象的解决方案:

var obj = CurrentInfo();
System.Type type = obj.GetType();
string url = (string)type.GetProperty("URL").GetValue(obj, null);

答案 2 :(得分:0)

您可以使用

类型
Tuple<string, string, int>

这是一个命名类,代表您要创建的内容,并且已经预先构建到.NET框架中,因此您无需创建任何新类或结构。

你会写类似

的东西
Tuple<string, string, int> obj = Tuple.Create("www.mydomain.com", "Jack", 20);

有关3参数元组的信息,请参阅MSDN文档:http://msdn.microsoft.com/en-us/library/dd387150(v=vs.110).aspx