Reputation: 13843
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 get the ID from b.
is there anyway i can get it, reflection ???
Upvotes: 5
Views: 26476
Reputation: 866
Just Try :
DataSet ds = (DataSet)OBJ;
Int32 MiD = Convert.ToInt32(ds.Tables[0].Rows[0]["MachineId"]);
Upvotes: 0
Reputation: 1062550
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
Upvotes: 6
Reputation: 564333
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);
Upvotes: 7
Reputation: 146419
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...
Upvotes: 0