我想要一种方法只能处理实现/,+, - ,*运算符的类型。有没有“干净”的方法来做到这一点?
答案 0 :(得分:2)
这需要一个接口,例如IArithmetic。
不幸的是,目前这种做法并不奏效。不过,这是一个highly requested feature。
有some workarounds,通常需要使用第二个通用参数,但大多数不适用于IEnumerator<T>
。
答案 1 :(得分:0)
您可以在类型参数上定义constraints。所以你可以要求T实现一个接口:
public static class Classy
{
public static void Extension<T>(this IEnumerable<T> Ninjas)
where T : IMathStuff
{
}
}
这需要所有T实现IMathStuff。现在,如果您无法将运算符放入IMathStuff接口,则可以将接口留空为Marker Interface,并仅将其应用于实现运算符的类。
这种假设您使用的是所有自定义类,而不是内置类型。这是一种不完全支持的解决方法。
答案 2 :(得分:0)
没有一种干净的方法可以做到这一点。您需要实现IEnumberable&lt; int&gt;,IEnumberable&lt; float&gt; ...等
答案 3 :(得分:0)
不在编译时。我想你必须使用反射。
很多都是值类型,例如int和long,“where T:struct”,但没有它们共有的接口或基类型。