通过引用调用操作
Invoke Action by reference
我是 C# 新手,看来我需要使用 Dictionary<string, Action>
所以我写了下面的代码:
using System;
using System.Collections.Generic;
public class Program
{
public static void Main()
{
var functions = new Dictionary<string, Action<string[]>>();
functions.Add("Foo", CountParameters);
functions.Add("Bar", SomeOtherMethodName);
Console.WriteLine("Hello World");
Action<string[]> action;
if (functions.TryGetValue("Foo", out action))
{
action();
// What shall I write here to invoke the action!?
}
else
{
// No function with that name
}
}
public static void CountParameters(string[] args)
{
Console.WriteLine("Fn 1");
}
public static void SomeOtherMethodName(string[] args)
{
Console.WriteLine("Fn 2");
}
}
我的问题分为两部分:
- 如果条件为真,我该如何调用
Action
。
- 我知道
Action
是 Func
和 void
return,但看起来输入 args
是必须的,就我而言,我没有 input args
也没有 output
所以 Action
是我需要的,还是其他东西?
如果您的所有方法都没有 return 值,那么 Action<string[]>
就可以了。如果他们甚至不需要参数,您可以简单地使用非通用 Action
-delegate 并省略 string[]
-parameter.
var functions = new Dictionary<string, Action>();
functions.Add("Foo", CountParameters);
...
关于调用:如果您省略了(不必要的)string[]
参数,您在代码片段中完成调用的方式就很好。只需调用从字典中获取的 Action
-delegate,就像您已经在没有任何参数的情况下所做的那样:action();
除了附加方括号 ()
,您还可以调用 action.Invoke();
.
我是 C# 新手,看来我需要使用 Dictionary<string, Action>
所以我写了下面的代码:
using System;
using System.Collections.Generic;
public class Program
{
public static void Main()
{
var functions = new Dictionary<string, Action<string[]>>();
functions.Add("Foo", CountParameters);
functions.Add("Bar", SomeOtherMethodName);
Console.WriteLine("Hello World");
Action<string[]> action;
if (functions.TryGetValue("Foo", out action))
{
action();
// What shall I write here to invoke the action!?
}
else
{
// No function with that name
}
}
public static void CountParameters(string[] args)
{
Console.WriteLine("Fn 1");
}
public static void SomeOtherMethodName(string[] args)
{
Console.WriteLine("Fn 2");
}
}
我的问题分为两部分:
- 如果条件为真,我该如何调用
Action
。 - 我知道
Action
是Func
和void
return,但看起来输入args
是必须的,就我而言,我没有input args
也没有output
所以Action
是我需要的,还是其他东西?
如果您的所有方法都没有 return 值,那么 Action<string[]>
就可以了。如果他们甚至不需要参数,您可以简单地使用非通用 Action
-delegate 并省略 string[]
-parameter.
var functions = new Dictionary<string, Action>();
functions.Add("Foo", CountParameters);
...
关于调用:如果您省略了(不必要的)string[]
参数,您在代码片段中完成调用的方式就很好。只需调用从字典中获取的 Action
-delegate,就像您已经在没有任何参数的情况下所做的那样:action();
除了附加方括号 ()
,您还可以调用 action.Invoke();
.