C # проверить, является ли тип PropertyInfo примитивным - PullRequest
0 голосов
/ 02 июля 2018

Можно ли проверить, является ли тип, который хранится в PropertyInfo, примитивным?

Например, я хочу сделать это:

 // from and to are both objects declared in the parameters.
 Type fType = from.GetType();
 Type tType = to.GetType();

 PropertyInfo[] fmpi = fType.GetProperties();
 PropertyInfo[] tmpi = tType.GetProperties();

 foreach(var pi in  tmpi)
 {
     if (pi.CanWrite)
     {
         var fpi = fmpi.SingleOrDefault(item => item.Name.ToLower() == pi.Name.ToLower());

         if (pi.GetType().IsPrimitive || pi.GetType() == typeof(string))
         {
             pi.SetValue(to, fpi.GetValue(from, null));
         }
     }
 }

Всякий раз, когда я выполняю этот код, он не проходит через if statemenet. Основная причина в том, что всякий раз, когда я делаю pi.GetType(), он говорит, что это PropertyInfo. Это вполне очевидно, поскольку оно объявлено как PropertyInfo. Но я надеюсь, что вы поняли идею.

Я также обнаружил, что pi.PropertyType.Name содержит имя фактического типа свойства. Могу ли я в любом случае выполнить IsPrimitive для этого свойства? Если нет, есть ли какая-нибудь работа, которая позволит мне сделать что-то подобное?

Я проверил Как проверить, является ли тип примитивным , но в этой ситуации пользователь использует прямой тип, а я использую PropertyInfo.

1 Ответ

0 голосов
/ 02 июля 2018

Основная причина в том, что всякий раз, когда я выполняю pi.GetType (), он говорит, что это PropertyInfo.

Вы должны использовать PropertyType свойство PropertyInfo вместо использования GetType() метода.

Выдержка из документации:

Получает тип этого свойства.

Так что вместо

pi.GetType().IsPrimitive 

используйте это

pi.PropertyType.IsPrimitive 
...