将C#反射代码移植到Metro-Ui

Les*_*nel 3 c# reflection microsoft-metro windows-8 windows-runtime

我正在尝试移植使用反射的现有C#类(通用工厂),但我无法编译这段代码:

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

我试着查看.NET Framework for Windows Metro Style AppsAssembly Class中的Reflection,在那里我发现了一个因为"使用System.Security.Permissions"而无法编译的示例.

svi*_*ick 6

就像您链接到的第一页所说的那样,您需要使用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)
    { }
}
Run Code Online (Sandbox Code Playgroud)