将Action 转换为Action

我被卡住了。

如何将Action to an Action转换为C#中Action to an Action

关心马格努斯

以下是您要求的示例(可以在最后一行添加类型检查以正确处理无效的强制转换exception,以便更加用户友好):

 public Action Convert(Action myActionT) { if (myActionT == null) return null; else return new Action(o => myActionT((T)o)); } 

可能你可以提供有关任务的更多细节,因为现在它看起来有点奇怪。

我今天正在寻找一种方法来做这件事并偶然发现这篇文章。 实际上,我发现这样做的唯一简单方法是将Action 包装在一个新的Action 中。 在我的例子中,我将我的动作推入并发字典,然后按类型检索它们。 实际上,我正在处理一个消息队列,其中可以定义操作来处理具有特定类型输入的消息。

 var _actions = new ConcurrentDictionary>(); Action actionStr = s => Console.WriteLine(s); var actionObj = new Action(obj => { var castObj = (V)Convert.ChangeType(obj, typeof(V)); actionStr(castObj); } ); _actions.TryAdd(typeof(string), actionObj); 

不确定你的意思是转换… Action是动作委托的通用声明…如果你想要一个对’object’起作用的动作委托,你会做类似的事情:

 var myAction = new Action(obj=> ... ); 

我假设你有这样的事情:

 void Foo(Action action) { } Action myaction; 

并希望转换myaction,以便将其传递给Foo。

这不起作用。

Foo可以将任何对象传递给类型派生自object的动作。 但是myaction只接受来自某事物的对象。