обнаружение нативных объектов с отражением - PullRequest
4 голосов
/ 15 декабря 2010

Я работаю с переводчиком объектов на основе отражения.

он в основном просматривает свойства объекта и присваивает значения свойствам с тем же именем / типом для переведенного объекта.

ObjectA.Name = "Джо"

переводится как:

ObjectB.Name = "Джо"

Мне нужно указать особый случай, когда свойство является пользовательским классом, например:

ObjectA.Address

Я надеялся, что смогу обнаружить такие свойства с помощью флага IsClass для PropertyType

propInfo.PropertyType.IsClass

но этот флаг также возвращает true для строковых свойств.

Есть ли другой способ проверить, что это свойство не нативного типа?

Ответы [ 2 ]

5 голосов
/ 15 декабря 2010

Я предполагаю, что вы хотите определить, является ли целевой тип не примитивным.Вероятно, вы можете использовать TypeCode для этого, например:

public bool IsNotCoreType(Type type)
{
    return (type != typeof(object) && Type.GetTypeCode(type) == TypeCode.Object);
}

Любой не примитив должен возвращать TypeCode.Object в результате Type.GetTypeCode, поэтому мы можем проверить, что мы получаем это и чтосам тип не System.Object.

Возможно, это поможет?

ОБНОВЛЕНИЕ : я переименовал метод в IsNotCoreType , чтобы охватить обапримитивы и не примитивы, такие как String, DateTime и т. д. (см. комментарии ниже).

1 голос
/ 15 декабря 2010

string - исключение, единственный примитивный тип в .NET, который является ссылочным типом.Вы должны учитывать это исключение в своем коде, чтобы проверить, является ли IsClass истинным и тип не совпадает с System.String.

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