使用类型参数动态转换对象



假设您有:

Type theType = typeof(Foobar);
object thingy = new Foobar();
Func<Foobar,bool> FooWork = (f) => return true;
Delegate work = FooWork;
//Without using static cast operations, how do I use 'theType' variable to
//cast the 'work' Delegate back to something I can invoke?
//This next line is very wrong...
bool result = ((Func<theType, bool>)work)(thingy);

重申一下注释,如何在不使用静态强制转换操作的情况下进行强制转换?我只想让work变量保存FooWork委托,而不需要了解Foobar类型。

我可以解决我的整体问题,如果我只是使我的包装类泛型,使work变量成为泛型,但目前我试图避免这种情况。

可以调用Delegate.DynamicInvoke:

bool result = (bool)work.DynamicInvoke(thingy);

解决这些类型问题的其他选项包括以下内容,每个选项都提供了改进的静态类型安全性,但可能适合也可能不适合您的代码。

  1. 为参数创建闭包。只要在定义workthingy可用并且不会更改,该方法将提供比DynamicInvoke更好的性能。

    Func<bool> work = () => FooWork(thingy);
    
  2. 使您的包装器泛型,并使用Func<T, bool>声明work,其中T是包装器的泛型。

相关内容

  • 没有找到相关文章

最新更新