Узнайте, является ли тип инстанцируемым - PullRequest
10 голосов
/ 06 апреля 2011

В C #, как я могу узнать, можно ли создать экземпляр Type? Я пытаюсь избежать исключения Activator.CreateInstance.

Мой текущий метод - type.IsClass && !type.IsInterface, но я боюсь, что это может не сработать на абстрактных классах и т. Д. Я также рассмотрел проверку type.TypeInitializer == null, но я не уверен, что это тоже надежно.

Какой самый простой / эффективный способ выяснить, является ли Type инстанцируемым?

Ответы [ 2 ]

11 голосов
/ 06 апреля 2011

Рассмотрим IsAbstract .Он будет обрабатывать как абстрактный, так и статический класс.Вы также можете проверить IsInterface

7 голосов
/ 06 апреля 2011

Есть много других ловушек. Он может иметь конструктор, который является частным или защищенным. Или он может не иметь конструктора по умолчанию, только конструкторы, которые принимают определенные типы аргументов. Если вам нужно беспокоиться об этом, то вы обязательно используете Activator.CreateInstance (), когда он не должен использоваться. Просто произвольное конструирование объектов может только создать хаос, вы не представляете, какие у них могут быть побочные эффекты. Избегайте класса «ФорматДиск».

Исключением является ваш друг, он говорит вам, что ваши предположения были неверны. Никогда не останавливайте преднамеренно полезную платформу .NET.

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