C# 如何从返回的匿名类型获取值
我有一个方法,它返回抽象类:C# 如何从返回的匿名类型获取值,c#,anonymous-types,return-type,C#,Anonymous Types,Return Type,我有一个方法,它返回抽象类: public static object CurrentInfo() { // some code here return new { URL = "www.mydomain.com", User = "Jack", Age = 20 }; } 当我使用该方法时,我获得了一个抽象类结果,因此我将其纳入对
public static object CurrentInfo()
{
// some code here
return new
{
URL = "www.mydomain.com",
User = "Jack",
Age = 20
};
}
当我使用该方法时,我获得了一个抽象类结果,因此我将其纳入对象(或变量)类型:
我无法从obj对象访问属性URL、年龄和用户。如果我尝试以下操作,会导致错误
string myUrl = obj.URL // the same form Age and User
我应该投吗?但是什么。。。?我想排除创建新结构的方法。使用这些属性创建一个类,以便您可以正确访问它们,然后返回对象可以是强类型类,而不是匿名类。这样可以访问对象的属性 比如
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
};
}
创建一个具有这些属性的类,以便可以正确访问它们,然后返回对象可以是强类型类,而不是匿名类。这样可以访问对象的属性 比如
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
};
}
你可以用这个字
Tuple<string, string, int>
元组
这是一个命名类,表示您试图创建的内容,并且它已经预构建到.NET framework中,因此您不需要创建任何新的类或结构
你会写这样的东西
Tuple<string, string, int> obj = Tuple.Create("www.mydomain.com", "Jack", 20);
Tuple obj=Tuple.Create(“www.mydomain.com”,“Jack”,20);
有关3参数元组,请参阅MSDN文档:您可以使用该类型
Tuple<string, string, int>
元组
这是一个命名类,表示您试图创建的内容,并且它已经预构建到.NET framework中,因此您不需要创建任何新的类或结构
你会写这样的东西
Tuple<string, string, int> obj = Tuple.Create("www.mydomain.com", "Jack", 20);
Tuple obj=Tuple.Create(“www.mydomain.com”,“Jack”,20);
有关三参数元组的信息,请参阅MSDN文档:如果要保留匿名类型(如图所示,这会使处理返回对象变得困难),那么下面是一个处理返回对象的解决方案:
var obj = CurrentInfo();
System.Type type = obj.GetType();
string url = (string)type.GetProperty("URL").GetValue(obj, null);
如果要保留匿名类型(如图所示,这会使处理变得困难),则以下是处理返回对象的解决方案:
var obj = CurrentInfo();
System.Type type = obj.GetType();
string url = (string)type.GetProperty("URL").GetValue(obj, null);
这不是一个抽象类,它是一个匿名类型。您可以强制转换为类型
dynamic
,但您想实现什么?为什么不使用命名类型(类
)而不是匿名类型?您可以将对象
更改为动态
,它应该可以工作,但这仍然是滥用匿名类型,所以您可能应该只定义一个类。这不是抽象类,而是匿名类型。您可以强制转换为类型动态
,但是你想达到什么目的呢?为什么不使用命名类型(类
)而不是匿名类型?您可以将对象
更改为动态
,它应该可以工作,但这仍然是滥用匿名类型,所以您可能应该只定义一个类。在方法声明中将此类型作为返回类型时,他可以使用返回元组。创建(“www.mydomain.com”,“Jack”,20);
.Thanx,这也是一个解决方案,但我需要使用已经编写好的代码;)在方法声明中使用此类型作为返回类型,他可以使用return Tuple.Create(“www.mydomain.com”,“Jack”,20);
.Thanx,这也是一个解决方案,但我需要使用已经编写好的代码;)您甚至可以将其作为一个扩展方法,采用对象、返回类型和属性名称。您甚至可以将其作为一个扩展方法,采用对象、返回类型和属性名称。当然,您可以使新类型对镜像匿名类型的语义。您的意思是使用私有/内部/受保护集还是使用构造函数?:)使用构造函数通常是最简单的,尽管不是唯一的选项。当然,它肯定会增加值而不是限制。当然,您可以使新类型不可变以镜像匿名类型的语义。你的意思是使用私有/内部/保护集还是使用构造函数?:)使用构造函数通常是最简单的,尽管不是唯一的选项。当然,它肯定会增加价值,而不是限制。