Портирование кода отражения C # в Metro-Ui - PullRequest
3 голосов
/ 13 марта 2012

Я пытаюсь портировать существующий класс C # (универсальная фабрика), который использует отражение, но я не могу получить этот кусок кода для компиляции:

Type[] types = Assembly.GetAssembly(typeof(TProduct)).GetTypes();
foreach (Type type in types)
{
    if (!typeof(TProduct).IsAssignableFrom(type) || type == typeof(TProduct))
...

Я попытался посмотреть на Отражение в .NET Framework для приложений в стиле Metro для Windows и Класс сборки , где я нашел пример, который не компилируется из-за "использования System.Security.Permissions".

1 Ответ

6 голосов
/ 13 марта 2012

Как и на первой странице, на которую вы ссылаетесь, вам нужно использовать TypeInfo вместо Type. Есть и другие изменения, например, Assembly имеет свойство DefinedTypes вместо метода GetTypes(). Модифицированный код может выглядеть так:

var tProductType = typeof(TProduct).GetTypeInfo();
var types = tProductType.Assembly.DefinedTypes; // or .ExportedTypes
foreach (var type in types)
{
    if (!tProductType.IsAssignableFrom(type) || type == tProductType)
    { }
}
...