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"]);
精彩评论