我想要一个方法仅适用于实现/,+, - ,*运算符的类型。有没有“干净”的方式来做到这一点?在IEnumerable <T>上定义扩展方法,其中T是特定种类的类型?
1
A
回答
2
这将需要一个接口,如IArithmetic。
不幸的是,目前这并不奏效。然而,这是一个highly requested feature。
有some workarounds,通常需要使用第二个通用参数,但大多数不会与IEnumerator<T>
一起使用。
0
您可以在类型参数上定义constraints。因此,您可以要求T实现一个接口:
public static class Classy
{
public static void Extension<T>(this IEnumerable<T> Ninjas)
where T : IMathStuff
{
}
}
这要求所有T实现IMathStuff。现在,如果您无法将操作员安装到IMathStuff界面中,则可以将界面留为空白(Marker Interface),并仅将其应用于执行操作员的类。
这种假定您正在使用所有自定义类而不是内置类型。这是一个不完全支持的解决方法。
0
有没有一种干净的方式来做到这一点。您将需要实现IEnumberable < int>,IEnumberable < float> ...等
0
不在编译期。我想,你必须使用反思。
其中很多值类型,如int和long,“where T:struct”,但没有它们共有的接口或基类型。
相关问题
- 1. 为IEnumerable定义扩展方法<T>它返回IEnumerable <T>?
- 2. 委托方法参数从IEnumerable <T>到特定类型
- 3. 什么时候必须为IEnumerable扩展方法指定类型<T>?
- 4. 扩展类中未定义的方法
- 5. IEnumerable <T, int>,Arity和泛型类型定义
- 6. 如何在F#中定义T []的类型扩展?
- 7. 当类型参数为IEnumerable <T>时,如何将扩展方法附加到泛型类?
- 8. 扩展方法上的IEnumerable
- 9. VisualBasicValue <T>:访问自定义类及其方法\性能
- 10. 方法createEntityGraph(类<>)是未定义的类型的EntityManager
- 11. 自定义集合扩展列表<T>添加方法
- 12. 方法buildActivity(类<MainActivity>)是未定义的类型Robolectric
- 13. 如何获取IQueryable <T>扩展方法而不是IEnumerable <T>扩展?
- 14. 如何定义泛型类的扩展方法?
- 15. 比较IEnumerable类型的<T>
- 16. 字典类型的扩展,其中键和值具有特定类型
- 17. 的方法是未定义的类型 - 从其他类
- 18. IEnumerable的扩展方法<Enum>?
- 19. 是否有一种“超类”方式来定义泛型中的类型或仅“扩展”?
- 20. GlassMapper - 的GetItem <T>()方法未能得到项目的特定类型
- 21. 扩展方法不编译(没有定义类型'字符串')
- 22. xml扩展类型和用户定义
- 23. 创建一个通用类中给定类型T的IEnumerable <SelectListItem>集合
- 24. IEnumerable <T>作为返回类型
- 25. 扩展core.logic到自定义类型
- 26. C#中特定类型特定方法的通用类
- 27. 扩展方法必须在C#中的非泛型静态类中定义
- 28. 定义一种方法,其返回类型是该方法的参数的单例类型
- 29. 类型T没有定义
- 30. 基于泛型类型T的扩展其中T:Swift协议?