Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.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# 是否可以强制转换Func<;对象,对象>;to Func<;T1,TResult>;使用反射而不使用反射。发射_C#_.net_Reflection - Fatal编程技术网

C# 是否可以强制转换Func<;对象,对象>;to Func<;T1,TResult>;使用反射而不使用反射。发射

C# 是否可以强制转换Func<;对象,对象>;to Func<;T1,TResult>;使用反射而不使用反射。发射,c#,.net,reflection,C#,.net,Reflection,我正在尝试创建一个与AOT(特别是Unity3d和IL2CPP)一起工作的Autofac风格的自动委托工厂的实现 我遇到的主要问题是无法在运行时从Func转换到Func 是否有任何方法可以通过反射来实现这一点,但要避免在运行时生成IL代码(即不使用reflection.Emit) Func=delegate(对象arg1) { 返回arg1.ToString()+“bar”; }; Func func2; func2=(Func)Func; Console.WriteLine(func2(“fo

我正在尝试创建一个与AOT(特别是Unity3d和IL2CPP)一起工作的Autofac风格的自动委托工厂的实现

我遇到的主要问题是无法在运行时从
Func
转换到
Func

是否有任何方法可以通过反射来实现这一点,但要避免在运行时生成IL代码(即不使用reflection.Emit)

Func=delegate(对象arg1)
{
返回arg1.ToString()+“bar”;
};
Func func2;
func2=(Func)Func;
Console.WriteLine(func2(“foo”);//“富吧”?:(
//System.InvalidCastException:无法将“System.Func`2[System.object,System.object]”类型的对象强制转换为“System.Func`2[System.String,System.String]”类型。

我认为不可能将一种类型的Func强制转换为另一种类型的Func。根据用例的不同,您可以将一个Func封装到另一个Func中以获得所需的结果,如下所示

Func<object, object> func = delegate (object arg1)
{
    return arg1.ToString() + " bar";
};

// Wrap func with a call by func2 to get the desired casting.
Func<string, string> func2 = o => func(o) as string;

Console.WriteLine(func2("foo"));
Func=delegate(对象arg1)
{
返回arg1.ToString()+“bar”;
};
//使用func2调用包装func以获得所需的强制转换。
Func func2=o=>Func(o)作为字符串;
控制台写入线(func2(“foo”);

我认为不可能将一种类型的Func强制转换为另一种类型的Func。根据用例的不同,您可以将一个Func封装到另一个Func中以获得所需的结果,如下所示

Func<object, object> func = delegate (object arg1)
{
    return arg1.ToString() + " bar";
};

// Wrap func with a call by func2 to get the desired casting.
Func<string, string> func2 = o => func(o) as string;

Console.WriteLine(func2("foo"));
Func=delegate(对象arg1)
{
返回arg1.ToString()+“bar”;
};
//使用func2调用包装func以获得所需的强制转换。
Func func2=o=>Func(o)作为字符串;
控制台写入线(func2(“foo”);

代表
关键字?2018年???
代表
关键字?2018年??