使用泛型可以将提供的类型限制为内置?

时间:2012-10-18 11:37:00

标签: c#

我想限制我的方法使用泛型接受内置类型的数据类型:

内置类型:http://msdn.microsoft.com/en-us/library/ya5y69ds(v=vs.80).aspx

该列表与值/引用类型不同。我想只支持内置的,而不是所有的值类型,而且还支持string,这是一个引用类型。

这可能吗?

编辑:

使用约束可以限制为这样的值类型:

T GetObject<T> where T: struct;

这不允许字符串通过。

2 个答案:

答案 0 :(得分:2)

无法使用泛型。

如果您需要这样做并保留编译时检查,您唯一的选择是使用不同的参数类型提供方法的重载,以便涵盖所有内置类型。

答案 1 :(得分:0)

不,不幸的是,这是不可能的。

我认为你能做的最接近的是:

T GetObject<T>()
{
    if (!(typeof(T) is typeof(int)
        || typeof(T) is typeof(uint)
        ...
        || typeof(T) is typeof(string)))
    {
        //Custom exception class for this purpose
        throw new TypeArgumentException("Invalid type parameter \"T\".");
    }

    ...
}

不太好,但能完成工作。