我的情况是我希望有一个方法可以采用其他方法作为输入.
输入方法将始终具有单个对象作为输入,但对象是不同的.
这或多或少是我需要做的:
public static void takeAnything(Action<object> inputFunc)
{
Console.WriteLine(inputFunc.Method.Name);
}
public static void test1(MyOwnObject input){
// Do stuff with input object
}
public static void test2(MyOtherOwnObject input){
// Do stuff with input object
}
public static void startSystem(){
takeAnything(test1);
takeAnything(test2);
}
Run Code Online (Sandbox Code Playgroud)
在这个虚拟案例中会写出:
test1
test2
Run Code Online (Sandbox Code Playgroud)
我只是不能让这个工作,所以任何帮助将非常感激.
编辑
我不知道这是否可行,也许不是,但重要的是呼叫只是takeAnything(test1),不是takeAnything<MyOwnObject>(test1)或其他任何东西.
使您的方法通用
public static void TakeAnything<T>(Action<T> inputFunc)
{
Console.WriteLine(inputFunc.Method.Name);
}
Run Code Online (Sandbox Code Playgroud)
当然,您只能传递具有单个输入参数的方法.
更新:遗憾的是,当您将方法组传递给方法时,C#无法从使用情况推断出动作泛型参数类型,因此只有使用它的方法是手动指定通用参数类型
takeAnything<MyOwnObject>(test)
Run Code Online (Sandbox Code Playgroud)
有关详细信息,请参阅问题C#3.0泛型类型推断 - 将委托作为函数参数传递
| 归档时间: |
|
| 查看次数: |
266 次 |
| 最近记录: |