具有通用参数的C#8.0可为空的引用类型功能

问题描述 投票:5回答:1

我有一个功能:

public static object? ToType(Type type, object? value)

我想创建一个有用的快捷方式,例如:

public static T ToType<T>(object? value)
{
  return (T)ToType(typeof(T), value);
}

启用了可空检查的C#8.0编译器将发出以下警告:

[CS8601:可能的空引用分配。

[Function接受stringint和其他类型,所以我不能设置像class这样的通用约束。同样,它可以返回null。使用T?进行转换和返回会产生编译器错误。

是否有解决警告的方法?

c# nullable c#-8.0 nullable-reference-types
1个回答
-2
投票

要使编译器不必担心null引用,只需确保要转换的对象不为null。

    [return: MaybeNull]
    public static T ToType<T>(object? value)
    {
        var res = ToType(typeof(T), value) ?? new object();
        return res is T generic ? generic : default;
    }

恕我直言,这种处理类型气味的方法。您想用ToType实现什么?也许您可以从中获得一些更清洁的方法。

© www.soinside.com 2019 - 2024. All rights reserved.