如何定义基本types的genericstypes限制?

我有以下通用types的方法:

T GetValue<T>(); 

我想限制T原始types,如int,string,浮动,但不是类的types。 我知道我可以像这样为类types定义generics:

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

我不确定原始types是否可行,如果是的话。

你可以使用它来限制它的值types:

 where C: struct 

你也提到了string。 不幸的是,string将不被允许,因为它们不是值types。

其实这个工作有一定的延伸:

 public T Object<T>() where T : struct, IComparable, IFormattable, IConvertible, IComparable<T>, IEquatable<T> 

要限制为数字types,您可以获得为ValueType类定义的以下样本的一些有用的提示

您正在寻找:

 T GetObject<T> where T: struct; 

没有通用的约束条件可以很好地匹配这些东西。 你究竟想干什么? 例如,你可以使用运行时检查,如静态ctor(对于genericstypes来说 – 对于generics方法来说不是那么容易的)…

然而; 大多数时候我看到这个,那是因为人们想要的一个:

  • 能够检查项目是否相等:在这种情况下使用EqualityComparer<T>.Default
  • 能够比较/sorting项目:在这种情况下使用Comparer<T>.Default
  • 能够执行算术:在这种情况下,使用MiscUtil对通用运算符的支持

你究竟在做什么方法? 这可能是你实际上需要C来实现IComparable,或者其他的接口。 在这种情况下,你想要的东西

 T GetObject<T> where T: IComparable