开发者

How to get value from the object but its type is unreachable

开发者 https://www.devze.com 2022-12-16 19:06 出处:网络
For instance, in my current class, there is a hashtable, Hashtable t = GetHashable(); //get from somewhere.

For instance, in my current class, there is a hashtable,

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

var b = t["key"];

the type of b is hidden from my current class, it is unreachable, not a public class type.

but i want to get a value from b, for example b has a field call "ID", i need to开发者_Python百科 get the ID from b.

is there anyway i can get it, reflection ???


If you don't know the type, then you'll need reflection:

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);


In C# 4.0, this would just be:

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

Otherwise; reflection:

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);

Another easier approach is to have the type implement a common interface:

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


By unreachable, you mean not a publically instantiable type? Cause if the assembly that defines this type is not there, then the object itself could not be fetched, the compiler would throw an error.

So, if the assembly defining the type is there, then yes you can use reflection to get at it...


Just Try :

 DataSet ds = (DataSet)OBJ;

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

精彩评论

暂无评论...
验证码 换一张
取 消