0

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

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

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

当我使用该方法时,我获得了一个抽象类 result,所以我把它变成了object(或var)类型:

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

我无法obj对象访问属性URLAgeUser。如果我尝试以下操作,则会导致错误。

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

我应该铸造它吗?但是为了什么……?我想排除创建新结构的方式。

4

3 回答 3

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
        };
     }
于 2013-11-01T14:43:52.407 回答
1

如果你想保留匿名类型,这使得它很难使用,那么这里有一个处理返回对象的解决方案:

var obj = CurrentInfo();
System.Type type = obj.GetType();
string url = (string)type.GetProperty("URL").GetValue(obj, null);
于 2013-11-01T14:48:56.907 回答
0

你可以使用类型

Tuple<string, string, int>

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

你会写类似

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

请参阅 MSDN 文档以获取 3 参数元组:http: //msdn.microsoft.com/en-us/library/dd387150 (v=vs.110).aspx

于 2013-11-01T14:44:40.813 回答