我想创建一个通用函数,但我希望它返回T?对于值类型,字节T表示引用类型。简单的方法是创建两个函数:
public T GetRef<T> where T : class
public T? GetStruct<T> where T : struct
但有没有办法做到这一点,我只能有一个方法(或一个方法名称)。我试过了:
public T Get<T> where T : class
public T? Get<T> where T : struct
但不允许这样做(where
子句不是函数签名的一部分)。我无法想象如何将代码放在一个函数中。
答案 0 :(得分:1)
没有。返回类型和泛型约束都不是用于绑定目的的方法签名的一部分,因此无法在编译时消除歧义这些方法。
您可以使用虚拟输入参数,例如标记的重复答案可以消除它们的歧义:
public T Get<T>(RequireClass<T> ignore = null) where T : class
public T? Get<T>(RequireStruct<T> ignore = null) where T : struct
public class RequireStruct<T> where T : struct { }
public class RequireClass<T> where T : class { }