如何在C#中使用泛型实现方法
问题描述:
我在Java中有这样的代码。如何在C#中制作类似的解决方案。 特别是我很感兴趣如何实现第一行和最后一行?如何在C#中使用泛型实现方法
此代码经过指定的包(包含Android和iOS的形式),并返回取决于getTargetPlatform Android的表单实例或iOS()
public static <T extends Helpers> T getPage(Class pageInterface) throws Exception {
Set<Class<?>> allClasses = new Reflections("forms", new SubTypesScanner(false)).getSubTypesOf(Object.class);
for (Class pageClass : allClasses) {
if (pageInterface.isAssignableFrom(pageClass) && pageClass.getName().contains(String.format(".%1$s.", getTargetPlatform()))) {
return (T) pageClass.newInstance();
}
}
return (T) pageInterface.newInstance();}
答
根据您的用例,你可以扫描组件。你的类型。例如:
public static T GetPage<T>(Type pageInterface) where T : Helpers
{
// maybe you need to scan different assemblies, depending on your usecase
var allTypes = Assembly.GetExecutingAssembly().GetTypes();
foreach (var pageType in allTypes)
{
if (pageInterface.IsAssignableFrom(pageType) && pageType.Name.Contains(String.Format(".%1$s.", GetTargetPlatform())))
{
return (T)Activator.CreateInstance(pageType);
}
}
return (T)Activator.CreateInstance(pageInterface);
}
答
第一行是象下面这样:
public static T getPage<T>(Class pageInterface) where T: Helpers
行和最后一行是一样的:
return (T) pageInterface.newInstance();
[创建C#中的通用方法](HTTP的可能重复:// stagingoverflow.com/questions/2144495/creating-a-generic-method-in-c-sharp) – STaefi
“第一行”你的意思是方法签名? – toadflakz