jojo
jojo

Reputation: 13843

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

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

Answers (4)

Hardeep Singh
Hardeep Singh

Reputation: 866

Just Try :

 DataSet ds = (DataSet)OBJ;

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

Upvotes: 0

Marc Gravell
Marc Gravell

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

Reed Copsey
Reed Copsey

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

Charles Bretana
Charles Bretana

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

Related Questions