Как получить значение из объекта, но его тип недоступен - PullRequest
5 голосов
/ 16 января 2010

Например, в моем текущем классе есть хеш-таблица,

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

var b = t["key"];

тип b скрыт от моего текущего класса, он недоступен, а не тип открытого класса.

но я хочу получить значение от b, например, b имеет поле вызова "ID", мне нужно получить удостоверение личности от б.

есть ли в любом случае, я могу получить это, отражение ???

Ответы [ 4 ]

7 голосов
/ 16 января 2010

Если вы не знаете тип, вам понадобится рефлексия:

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);
6 голосов
/ 16 января 2010

В 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
0 голосов
/ 04 марта 2018

Просто попробуйте:

 DataSet ds = (DataSet)OBJ;

 Int32 MiD  = Convert.ToInt32(ds.Tables[0].Rows[0]["MachineId"]);
0 голосов
/ 16 января 2010

Под недостижимым вы имеете в виду не общедоступный тип?Причина, если сборка, которая определяет этот тип, отсутствует, тогда сам объект не может быть выбран, компилятор выдаст ошибку.

Итак, если есть сборка, определяющая тип, то да, вы можете использовать отражение, чтобы добраться до нее ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...