【问题标题】:How to make a List<> that holds voids?如何制作一个包含空白的 List<>?
【发布时间】:2011-11-18 00:57:37
【问题描述】:

当我执行List&lt;void&gt; voidList = new List&lt;void&gt;(); 时出现错误。 我将如何做这样的事情,它包含空白?

【问题讨论】:

  • 你为什么要做这样的事情?
  • 这有什么可能的应用?或者您是否想要保留返回 void 的函数?
  • 考虑让标题更能反映实际目标。

标签: c# list c#-4.0 void


【解决方案1】:

如果您希望保存 void 方法列表,可以使用 List&lt;Action&gt;

【讨论】:

  • ...只要方法不带参数
【解决方案2】:

适用于单声道:

var x = new List<System.Void>();

当然,

var x = new List<Action>();

效果同样好,但更有用

【讨论】:

【解决方案3】:

为什么?

您可以创建一个允许任何对象(或盒装结构)进入列表的列表。

但您基本上是在为非通用的东西使用通用列表。您可以创建最常用的基类来存储您的对象。如果没有常用的,那么 Object 就是您所追求的。

【讨论】:

  • 更新后我同意@Sam Pearson,您实际上想要一个无效代表列表。在 C# 4 中正确的方法是使用 Action
【解决方案4】:
private void DoStuff1() { ... }
private void DoStuff2() { ... }

var myActions = new List<Action> { DoStuff1, DoStuff2 };

然后,比如说,您可能想要循环并调用它们:

foreach (var action in myActions)
{
    action();
}

【讨论】:

  • 这会产生编译时错误:CS1950 The best overloaded Add method 'List&lt;Action&gt;.Add(Action)' for the collection initializer has some invalid argumentsCS1921 The best overloaded method match for 'EditUserUC.ResetName()' has wrong signature for the initializer element. The initializable Add must be an accessible instance method.
猜你喜欢
  • 1970-01-01
  • 2015-12-22
  • 2011-06-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-11
  • 2019-01-29
  • 1970-01-01
相关资源
最近更新 更多