将可为空的 T 传递给方法

本文关键字:方法 | 更新日期: 2024-11-07 10:33:15

>我有以下内容:

public void AddVariable<T>(String name, T value) where T : struct {
}

此方法接受以下内容:

AddVariable("Price", 2387);

但不接受

AddVariable("Name", "A name");

我希望 T 只是基本类型,如 int、字符串、布尔值......这就是我使用结构的原因。但我认为我需要它为空才能接受字符串。

如何将方法设置为接受可为 null 的基本类型?

有没有更好的方法可以做到这一点?

将可为空的 T 传递给方法

没有这样的约束。 stringint 之间唯一常见的基类型是对象、IConvertibleIComparable 。 您可以在运行时进行类型检查,或者对每种受支持的类型使用重载(如果可以节省代码重复,则使用私有泛型方法):

private void AddVariable<T>(String name, T value) 
{
    // common code here
}
public void AddVariable(String name, int value) 
{
    AddVariable<int>(name, value);
}
public void AddVariable(String name, string value) 
{
    AddVariable<string>(name, value);
}

等。