Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/269.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 转换操作<;代表>;_C#_Delegates - Fatal编程技术网

C# 转换操作<;代表>;

C# 转换操作<;代表>;,c#,delegates,C#,Delegates,给定两个具有相同签名的代理,您可以轻松地从一个转换为另一个 delegate string d1(string x, params object[] o); delegate string d2(string x, params object[] o); var d2instance = new d2(d1instance); 我想把动作转换成动作,但我不知道该怎么做 class Program { private delegate void d1(string x, params

给定两个具有相同签名的代理,您可以轻松地从一个转换为另一个

delegate string d1(string x, params object[] o);
delegate string d2(string x, params object[] o);

var d2instance = new d2(d1instance);
我想把
动作
转换成
动作
,但我不知道该怎么做

class Program
{
    private delegate void d1(string x, params object[] o);
    private delegate void d2(string x, params object[] o);

    private static void DoSomething(string template, params object[] args)
    {
        Console.WriteLine(String.Format(template, args));
    }

    private static void Main(string[] args)
    {
        RunD1(m => m("Foo {0}", 42));
        RunD2(m => m("Foo {0}", 42));
    }

    private static void RunD1(Action<d1> action)
    {
        action(DoSomething);
    }

    private static void RunD2(Action<d2> action)
    {
        // This needs to call RunD1
        // RunD1(.....);
    }
}
类程序
{
私有委托void d1(字符串x,参数对象[]o);
私有委托void d2(字符串x,参数对象[]o);
私有静态void DoSomething(字符串模板,参数对象[]args)
{
WriteLine(String.Format(模板,参数));
}
私有静态void Main(字符串[]args)
{
RunD1(m=>m(“Foo{0}”,42));
RunD2(m=>m(“Foo{0}”,42));
}
私有静态无效RunD1(操作操作)
{
作用(剂量测定法);
}
私有静态无效RunD2(操作操作)
{
//这需要调用RunD1
//RunD1(…);
}
}

动作
创建
动作
的最简单方法是通过另一个lambda表达式:

Action<d1> original = ...;
Action<d2> converted = x => original(new d1(x));
Action-original=。。。;
已转换的动作=x=>原始(新的d1(x));

当然,最好避免完全使用不同的代理类型:)

谢谢!我很想避免它,但我正在尝试与第三方库中的内部类进行交互。