我有以下通用类型的方法:
T GetValue<T>();
我想将T限制为原始类型,如int,string,float,但不是类类型。我知道我可以像这样定义类类的泛型:
C GetObject<C>() where C: class;
我不确定原始类型是否可能以及如果可能。
答案 0 :(得分:44)
您可以使用它将其限制为值类型:
where C: struct
你还提到了字符串。不幸的是,不允许字符串,因为它们不是值类型。
答案 1 :(得分:16)
实际上,这在一定程度上起到了作用:
public T Object<T>() where T :
struct, IComparable, IFormattable, IConvertible, IComparable<T>, IEquatable<T>
要限制数字类型,您可以获得为ValueType类定义的以下样本的一些有用提示
答案 2 :(得分:13)
以下是您要找的内容:
T GetObject<T>() where T : struct;
答案 3 :(得分:10)
没有通用约束可以干净地匹配这组事物。你真的想做什么?例如,您可以通过运行时检查来解决它,例如静态ctor(对于泛型类型 - 对于泛型方法来说不那么容易)......
然而;大多数时候,我看到这一点,是因为人们想要其中一个:
EqualityComparer<T>.Default
Comparer<T>.Default
答案 4 :(得分:5)
你在这个方法中真正想做什么?可能实际上你需要C来实现IComparable或其他一些接口。在这种情况下,你想要像
这样的东西T GetObject<T> where T: IComparable