C# 是否可以强制转换Func<;对象,对象>;to Func<;T1,TResult>;使用反射而不使用反射。发射
我正在尝试创建一个与AOT(特别是Unity3d和IL2CPP)一起工作的Autofac风格的自动委托工厂的实现 我遇到的主要问题是无法在运行时从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
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年??