Как получить значение типа Nullable через отражение - PullRequest
12 голосов
/ 04 марта 2011

Используя отражение, мне нужно получить значение свойства Nullable Type of DateTime

Как я могу это сделать?

Когда я пытаюсь propertyInfo.GetValue(object, null), он не работает.

thx

Мой код:

 var propertyInfos = myClass.GetType().GetProperties();

 foreach (PropertyInfo propertyInfo in propertyInfos)
 {
     object propertyValue= propertyInfo.GetValue(myClass, null);
 }

propertyValue результат всегда нулевой для типа Nullable

Ответы [ 3 ]

29 голосов
/ 04 марта 2011

Отражение и Nullable<T> немного боли; отражение использует object, а Nullable<T> имеет специальные правила упаковки / распаковки для object. Таким образом, к тому времени, когда у вас есть object, это больше не a Nullable<T> - это либо null, либо само значение .

т.е.

int? a = 123, b = null;
object c = a; // 123 as a boxed int
object d = b; // null

Иногда это немного сбивает с толку, и обратите внимание, что вы не можете получить оригинал T из пустой Nullable<T>, которая была упакована, так как все, что у вас есть, это null .

0 голосов
/ 04 марта 2011

Я попробовал это прямо сейчас, и оно работало нормально:

DateTime? d = DateTime.Now;
var dt = typeof(DateTime?);
Console.WriteLine(dt.GetMethod("ToString").Invoke(d, null));
0 голосов
/ 04 марта 2011

Имеется простой класс:

public class Foo
{
    public DateTime? Bar { get; set; }
}

И код:

Foo foo = new Foo();

foo.Bar = DateTime.Now;

PropertyInfo pi = foo.GetType().GetProperty("Bar");

object value = pi.GetValue(foo, null);

имеет значение null (если .Bar равно null) или значение DateTime.Какая часть этого не работает для вас?

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