Узнайте, доступен ли тип

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

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

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

Ответ 1

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

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

Ответ 2

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