我想将我的方法使用泛型接受的数据类型限制为内置类型:
内置类型: http: //msdn.microsoft.com/en-us/library/ya5y69ds (v=vs.80).aspx
该列表不同于值/引用类型。而且我想只支持内置的,而不是所有的值类型,而且 ofc 也支持字符串,它是一种引用类型。
这可能吗?
编辑:
使用约束,您可以限制为像这样的值类型:
T GetObject<T> where T: struct;
但是,这将不允许字符串通过。
我想将我的方法使用泛型接受的数据类型限制为内置类型:
内置类型: http: //msdn.microsoft.com/en-us/library/ya5y69ds (v=vs.80).aspx
该列表不同于值/引用类型。而且我想只支持内置的,而不是所有的值类型,而且 ofc 也支持字符串,它是一种引用类型。
这可能吗?
编辑:
使用约束,您可以限制为像这样的值类型:
T GetObject<T> where T: struct;
但是,这将不允许字符串通过。
不可能与泛型有关。
如果您需要这样做并保留编译时检查,您唯一的选择是提供具有不同参数类型的方法的重载,以便覆盖所有内置类型。
不,不幸的是这是不可能的。
我认为你可以做的最接近的是:
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\".");
}
...
}
不那么好,但可以完成工作。