使用Action <object>作为方法输入

Bja*_*kes 1 c#

我的情况是我希望有一个方法可以采用其他方法作为输入.

输入方法将始终具有单个对象作为输入,但对象是不同的.

这或多或少是我需要做的:

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)或其他任何东西.

Ser*_*kiy 5

使您的方法通用

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泛型类型推断 - 将委托作为函数参数传递