【发布时间】:2014-04-28 17:35:09
【问题描述】:
请注意,我的逻辑太复杂了,我已经简化了一切以专注于这个问题。
我有函数字典,我必须调用它,但函数将类型 T 作为输入参数,它是派生类型,我没有访问权限,它在运行时可以是任何东西。如何调用它?
我收到以下错误,
Unable to cast object of type
'System.Func`2[DerivedClass,System.String]' to type
'System.Func`2[BaseClass,System.String]'.
我已经尝试过并且已经知道的替代方案,我正在寻找比以下替代方案更好的性能。
- 使用动态
- 重新创建表达式树,然后动态编译执行
这两种选择都非常昂贵,我需要更简单的方法。
这不是关于为什么我得到这个编译器错误的问题,或者我是否需要重新设计我的应用程序,当我已经说过我有两种调用 Func 的替代方案时,我正在寻找第三种更简单的替代方案(如果存在)
如何在无法访问 DerivedClass 的情况下调用 Func<DerivedClass,String>?我有一件物品。
class Program
{
static void Main(string[] args)
{
object input = new DerivedClass();
Func<BaseClass, string> f = null;
Func<DerivedClass, string> a = s => s.ToString();
object obj = a;
// ERROR
f = (Func<BaseClass, string>)obj;
Console.WriteLine(f(input));
Console.ReadLine();
}
}
public class BaseClass {
public override string ToString()
{
return "Base Class";
}
}
public class DerivedClass : BaseClass {
public override string ToString()
{
return "Derived Class";
}
}
【问题讨论】:
-
您的问题中“我确实有权访问”是什么意思?
-
@YuvalItzchakov 我写过我无权访问该类型,我的代码是通用库的一部分,它在另一个项目中使用。所以在运行时,我将有任何函数,我只需要调用它。