2016-01-22 92 views
2

任何人可以帮助我的这种方法重构:C#静态方法重构

public static void MethodA(this SceneObject obj, double value) 
public static void MethodA(this SceneObject obj, long value) 
public static void MethodA(this SceneObject obj, int value) 

public static void MethodB(this IEnumerable<MyData> sObjects, IEnumerable<int> values) 
public static void MethodB(this IEnumerable<MyData> sObjects, IEnumerable<long> values) 

我怎样才能让他们可以采取任何一种特性参数的一个通用的方法是什么?谢谢。

回答

3

只需使用generic功能。

public static void MethodA<T>(this SceneObject obj, T value) 

然后你可以使用它像这样:

SceneObject.MethodA<long>(50); 
Sceneobject.MethodA<int>(50); 

value参数自动获取T的类型,因此在这种情况下longìnt

1
public static void MethodA<T>(this SceneObject obj, T value) where T : struct 

public static void MethodB<T>(this IEnumerable<MyData> sObjects, IEnumerable<T> values) where T : struct 
2

如果您的问题恰恰是如何使你的定义通用的,它可以像做:

public static void Method<T>(this object, T value) 

如果你希望能够把它用在所有类型的对象,或者不是你可能想调整你正在扩展的类型。

的使用将被:

someObject.Method<int>(1); 
someObject.Method<long>(1); 
someObject.Method<double>(1); 

someObject.Method<List<int>>(new List<int> { 1, 2, 3 }); 

如果你想有一个数值约束你也可以这样做:

public static void Method<T>(this object, T value) : where T : IComparable, IComparable<T>