首页 > 解决方案 > 即使互斥约束,通用 C# 方法也模棱两可?

问题描述

为什么这两种方法被认为是模棱两可的?

public static T Work<T>(this MyClass thing) where T : class { ... }
public static T? Work<T>(this MyClass thing) where T : struct { ... }

约束classstruct是互斥的,不是吗?因此,对于任何类型,对这个方法的任何调用都应该是明确的,对T吧?因为T不能既是引用类型又是值类型......?

这只是 C# 编译器/语言定义中的疏忽吗?

我想要做的是创建一个通用方法,null在某些情况下返回意味着“没有值存在”,并使该方法能够处理引用和值类型。对于值类型T,我希望返回类型为Nullable<T>或更短T?

标签: c#genericsconstraintsambiguous

解决方案


推荐阅读