如何定义原始类型的泛型类型限制?

时间:2009-04-30 03:42:56

标签: c# .net generics type-constraints

我有以下通用类型的方法:

T GetValue<T>();

我想将T限制为原始类型,如int,string,float,但不是类类型。我知道我可以像这样定义类类的泛型:

C GetObject<C>() where C: class;

我不确定原始类型是否可能以及如果可能。

5 个答案:

答案 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
  • 能够执行算术:在这种情况下使用MiscUtilgeneric operators的支持

答案 4 :(得分:5)

你在这个方法中真正想做什么?可能实际上你需要C来实现IComparable或其他一些接口。在这种情况下,你想要像

这样的东西
T GetObject<T> where T: IComparable