可返回T的泛型函数?或T取决于T是结构还是类

时间:2016-05-25 17:24:26

标签: c# generics

我想创建一个通用函数,但我希望它返回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子句不是函数签名的一部分)。我无法想象如何将代码放在一个函数中。

1 个答案:

答案 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 { }