【问题标题】:Why there's no Nullable-Generic Methods? which accept both references and value types为什么没有可空泛型方法?接受引用和值类型
【发布时间】:2019-11-14 17:57:14
【问题描述】:

这个作品

    public static T? Read<T>(object value) where T : struct
    {
        return (T)Convert.ChangeType(value, typeof(T));
    }

但这不起作用:

错误 CS8370 功能“可为空的引用类型”在 C# 7.3 中不可用。请使用 8.0 或更高版本的语言。

   public static T? Read<T>(object value)
    {
        return (T)Convert.ChangeType(value, typeof(T));
    }

我对我搜索过但没有找到的错误或功能感到好奇。

如果不相关,我可能会删除该问题。所以请通知我这样做。

【问题讨论】:

  • 即使使用 C# 8 这也是不可行的 - 请参阅 stackoverflow.com/questions/58852272 了解原因。
  • 感谢您的回复,也就是说它不起作用?以及为什么实施。引用类型我的意思是为什么他们需要“?”它已经允许为空。或者只是为了设计或娱乐。
  • 这个问题是关于尝试编写一个返回任意类型参数的可为空形式的方法。我链接到的问题也与此有关。这应该绝不被视为可空引用类型是一个坏主意的声明。这只是一个限制。就“为什么?是必要的”而言,这是一个更广泛的问题——我建议您阅读更多关于一般可空引用类型的信息。见docs.microsoft.com/en-us/dotnet/csharp/nullable-references
  • @deveton:显然有一个开关默认打开引用类型的不可为空。 |它有点像 readonly 或 out - 编译器提示该变量应该/不应该发生什么。

标签: c# .net generics nullable c#-7.3


【解决方案1】:

只能使用C# 8.0 添加可空引用类型。您正在使用 C# 7.3 构建。

不过,命名有点混乱。可空结构/值类型是有意义的。因为通常它们不能为空。

但所有引用类型都可以为空。实际上似乎是要稍微改变一下该规则,而不是隐式地使所有引用类型都不可为空(如值类型)。

【讨论】:

  • “即便如此,我也不确定它们的用途。毕竟,引用类型本质上是可以为空的。”当您打开可空引用类型时,这就是 C# 8 中的变化。例如,string 类型的变量从可为空(在 C# 8 之前,或关闭 NRT)变为“不应该为空,如果它看起来可能是空,编译器会警告你”,例如打开 NRT。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-06
相关资源
最近更新 更多