2016-01-22 127 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>