如何从对象获取值,但其类型无法访问

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何从对象获取值,但其类型无法访问相关的知识,希望对你有一定的参考价值。

例如,在我当前的类中,有一个哈希表,

Hashtable t = GetHashable(); //get from somewhere.

var b = t["key"];

b的类型对我当前的类是隐藏的,它是无法访问的,不是公共类类型。

但我想从b获得一个值,例如b有一个字段调用“ID”,我需要从b获取ID。

无论如何我能得到它,反思???

答案

如果您不知道类型,那么您需要反思:

object b = t["key"];
Type typeB = b.GetType();

// If ID is a property
object value = typeB.GetProperty("ID").GetValue(b, null);

// If ID is a field
object value = typeB.GetField("ID").GetValue(b);
另一答案

在C#4.0中,这只是:

dynamic b = t["key"];
dynamic id = b.ID; // or int if you expect int

除此以外;反射:

object b = t["key"];
// note I assume property here:
object id1 = b.GetType().GetProperty("ID").GetValue(b, null);
// or for a field:
object id2 = b.GetType().GetField("ID").GetValue(b);

另一种更简单的方法是让类型实现一个通用接口:

var b = (IFoo)t["key"];
var id = b.ID; // because ID defined on IFoo, which the object implements
另一答案

如果无法访问,您的意思是不是可公开实例化的类型?定义此类型的程序集的原因不存在,则无法获取对象本身,编译器将抛出错误。

所以,如果定义类型的程序集在那里,那么是的,你可以使用反射来实现它...

另一答案

试一试 :

 DataSet ds = (DataSet)OBJ;

 Int32 MiD  = Convert.ToInt32(ds.Tables[0].Rows[0]["MachineId"]);

以上是关于如何从对象获取值,但其类型无法访问的主要内容,如果未能解决你的问题,请参考以下文章

如何从片段中的 JSON 响应中的对象获取数据

使用Android导航组件时如何从后台获取片段?

片段 TextView 无法从 parcelable 对象更新

如何从 Pandas DataFrame 中获取值而不是索引和对象类型

如何从另一个片段访问片段对象

不使用循环从可迭代对象中获取值