2

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

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

该列表不同于值/引用类型。而且我想只支持内置的,而不是所有的值类型,而且 ofc 也支持字符串,它是一种引用类型。

这可能吗?

编辑:

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

T GetObject<T> where T: struct;

但是,这将不允许字符串通过。

4

2 回答 2

2

不可能与泛型有关。

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

于 2012-10-18T11:54:35.210 回答
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\".");
    }

    ...
}

不那么好,但可以完成工作。

于 2012-10-18T11:48:29.707 回答