C#静态方法重构

时间:2016-01-22 10:34:55

标签: c# refactoring

任何人都可以帮我重构这些方法:

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 个答案:

答案 0 :(得分: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 :(得分: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>

答案 2 :(得分: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