根据可为空的类型创建泛型类的实例

马特乌斯·罗古尔斯基(Mateusz Rogulski)

我想创建将某些类型的值作为参数的泛型函数。

  • 此类型可以为空或不能为空。
  • 如果value为null函数应该返回null。
  • 如果它不是null,并且它不是可为null的类型,则函数应该返回MyGenericClass<T>(parameter)(参数也可以由属性设置,因此无需在此处使用构造函数)
  • 如果它不是null,并且它是可为null的类型,则函数应该返回类似于MyGenericClass<NotNullType(T)>(parameter.Value) example的内容:对于参数int?x,函数应该返回MyGenericClass<int>(x.Value)

这是我为执行此操作而编写的代码,但没有成功:

private MyGenericClass GetMyGenericClassOrNull<T> (T value) {
    if (value != null) {
        var underlyingType = Nullable.GetUnderlyingType(typeof(T));
        if (underlyingType == null) {
            return new MyGenericClass<T>(value);
        } else {
            return new MyGenericClass<underlyingType>(value);
        }
    }
    return null;
}

如您所料,line:return new MyGenericClass<underlyingType>(value);在这里是有问题的。

有什么办法做这种事吗?

Xanatos

您可以尝试:

public class MyGenericClass
{
}

public class MyGenericClass<T> : MyGenericClass
{
    public MyGenericClass(T value)
    {
    }
}

public static MyGenericClass GetMyGenericClassOrNull<T>(T? value) where T : struct
{
    if (value != null)
    {
        return new MyGenericClass<T>(value.Value);
    }

    return null;
}

public static MyGenericClass GetMyGenericClassOrNull<T>(T value)
{
    if (value != null)
    {
        return new MyGenericClass<T>(value);
    }

    return null;
}

您有两种单独的方法。可空类型将转到第一个,即T不可空“基”类型。

请注意,public static MyGenericClass<T>如果需要,您可以进行签名而不会出现任何问题。目前尚不清楚您MyGenericClass的建造方式。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在泛型类中处理可为空的类型

来自分类Dev

泛型和可为空(类与结构)

来自分类Dev

需要根据泛型类的类型创建不同的类

来自分类Dev

创建泛型类型的实例

来自分类Dev

如何识别泛型类型的可为空的引用类型?

来自分类Dev

使用类实例作为泛型类型

来自分类Dev

创建泛型类型实例的方法

来自分类Dev

在DART中创建泛型类型的实例

来自分类Dev

创建泛型类型实例的方法

来自分类Dev

在Scala中创建泛型类型的实例?

来自分类Dev

如何创建泛型类型的实例?

来自分类Dev

创建泛型类的实例,如何轻松地将类型设置为调用类

来自分类Dev

使用类的实例获取类的泛型类型参数的数量?

来自分类Dev

如何允许C#8中的可为空的泛型类型作为方法的返回类型?

来自分类Dev

在运行时从对象的字符串名称创建具有泛型类型的类的实例和具有相同泛型类型的调用方法

来自分类Dev

Scala从泛型类型实例化具体类

来自分类Dev

Java-实例化泛型类型的类

来自分类Dev

用于返回类的不同泛型类型的实例的单个方法

来自分类Dev

基于Newexpression返回匿名类型的泛型类实例

来自分类Dev

Kotlin 在从泛型类生成实例时提供类型

来自分类Dev

C#泛型错误-类型字符串必须不可为空

来自分类Dev

创建带有参数的泛型类型的实例作为辅助泛型类型

来自分类Dev

在Java中使用静态方法创建类型的泛型实例

来自分类Dev

如何仅通过泛型类型 T 创建实例

来自分类Dev

如何在Java中创建泛型类的实例?

来自分类Dev

泛型类,根据类型返回特定的数据集

来自分类Dev

如何在泛型方法中获取泛型类型的类实例

来自分类Dev

将动态类型的实例传递给泛型类中的泛型方法

来自分类Dev

实例化泛型类型

Related 相关文章

  1. 1

    如何在泛型类中处理可为空的类型

  2. 2

    泛型和可为空(类与结构)

  3. 3

    需要根据泛型类的类型创建不同的类

  4. 4

    创建泛型类型的实例

  5. 5

    如何识别泛型类型的可为空的引用类型?

  6. 6

    使用类实例作为泛型类型

  7. 7

    创建泛型类型实例的方法

  8. 8

    在DART中创建泛型类型的实例

  9. 9

    创建泛型类型实例的方法

  10. 10

    在Scala中创建泛型类型的实例?

  11. 11

    如何创建泛型类型的实例?

  12. 12

    创建泛型类的实例,如何轻松地将类型设置为调用类

  13. 13

    使用类的实例获取类的泛型类型参数的数量?

  14. 14

    如何允许C#8中的可为空的泛型类型作为方法的返回类型?

  15. 15

    在运行时从对象的字符串名称创建具有泛型类型的类的实例和具有相同泛型类型的调用方法

  16. 16

    Scala从泛型类型实例化具体类

  17. 17

    Java-实例化泛型类型的类

  18. 18

    用于返回类的不同泛型类型的实例的单个方法

  19. 19

    基于Newexpression返回匿名类型的泛型类实例

  20. 20

    Kotlin 在从泛型类生成实例时提供类型

  21. 21

    C#泛型错误-类型字符串必须不可为空

  22. 22

    创建带有参数的泛型类型的实例作为辅助泛型类型

  23. 23

    在Java中使用静态方法创建类型的泛型实例

  24. 24

    如何仅通过泛型类型 T 创建实例

  25. 25

    如何在Java中创建泛型类的实例?

  26. 26

    泛型类,根据类型返回特定的数据集

  27. 27

    如何在泛型方法中获取泛型类型的类实例

  28. 28

    将动态类型的实例传递给泛型类中的泛型方法

  29. 29

    实例化泛型类型

热门标签

归档