Можно ли проверить, является ли тип, который хранится в 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
.