我想限制我的方法使用泛型接受内置类型的数据类型:
内置类型:http://msdn.microsoft.com/en-us/library/ya5y69ds(v=vs.80).aspx
该列表与值/引用类型不同。我想只支持内置的,而不是所有的值类型,而且还支持string,这是一个引用类型。
这可能吗?
编辑:
使用约束可以限制为这样的值类型:
T GetObject<T> where T: struct;
这不允许字符串通过。
答案 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\".");
}
...
}
不太好,但能完成工作。