【问题标题】:How to implement method with generics in C#如何在 C# 中使用泛型实现方法
【发布时间】:2016-10-04 18:29:41
【问题描述】:

我在 Java 中有这样的代码。如何在 C# 中制作类似的解决方案。 特别是我感兴趣如何实现第一行和最后一行

此代码通过指定的包(包含 Android 和 iOS 的表单)并返回 Android 表单实例或 iOS,具体取决于 getTargetPlatform()

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();}

【问题讨论】:

标签: java c# generics


【解决方案1】:

根据您的用例,您可以为您的类型扫描程序集。示例:

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);
}

【讨论】:

    【解决方案2】:

    第一行如下:

    public static T getPage<T>(Class pageInterface) where T: Helpers
    

    最后一行是一样的:

    return (T) pageInterface.newInstance();
    

    【讨论】:

      猜你喜欢
      • 2023-03-20
      • 1970-01-01
      • 2019-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-28
      相关资源
      最近更新 更多