如何定义基本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