C#静态方法重构
C# static method 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)
我怎样才能使它们成为一种可以接受任何类型参数的通用方法?谢谢
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
只需使用 generic 功能。
public static void MethodA<T>(this SceneObject obj, T value)
那么你可以这样使用它:
SceneObject.MethodA<long>(50);
Sceneobject.MethodA<int>(50);
value
参数自动获取T的类型。所以在这种情况下long
或ìnt
。
如果您的问题只是关于如何使您的定义通用,可以这样做:
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>
谁能帮我重构这些方法:
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)
我怎样才能使它们成为一种可以接受任何类型参数的通用方法?谢谢
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
只需使用 generic 功能。
public static void MethodA<T>(this SceneObject obj, T value)
那么你可以这样使用它:
SceneObject.MethodA<long>(50);
Sceneobject.MethodA<int>(50);
value
参数自动获取T的类型。所以在这种情况下long
或ìnt
。
如果您的问题只是关于如何使您的定义通用,可以这样做:
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>