【问题标题】:Cannot convert void to list [duplicate]无法将 void 转换为列表 [重复]
【发布时间】:2017-02-06 19:29:13
【问题描述】:

我正在尝试编写我的第一个 c# 程序,但我无法不断收到以下错误。有人可以解释为什么我会收到此错误吗?任何东西在被声明的时候都有一个类型,这个 void 是从哪里来的?如果它很重要,我正在https://repl.it/languages/csharp 上编写代码。

using System;
using System.Linq;
using System.Collections.Generic;
class MainClass {
  public static void Main (string[] args) {
  List<string> mylist = new List<string>() { "2","1","2","3","3","4" };

  mylist=mylist.Sort();

  foreach(var item in mylist)
  {
      Console.Write(item.ToString());
  }
  }
}

错误:

Cannot implicitly convert type `void' to `System.Collections.Generic.List<string>'

【问题讨论】:

  • Sort() 已就位。无需分配结果。
  • 框架中的大多数东西都是可变的,因此更改原始对象的方法往往返回 void 而不是被变异的对象。字符串是一个值得注意的例外。
  • @Will 将数组称为异常更准确。字符串包含在其中是因为它们使用数组作为基础数据类型。
  • @Abion47 嗯,你在分裂头发。你可以改变一个数组,但你不能直接改变它的长度。但这不是字符串不可变的原因,该决定比数组类型的实现细节涉及更多。

标签: c# .net linq list


【解决方案1】:

List&lt;T&gt;.Sort 返回void,因为它实际上修改了调用它的List(它不返回新集合)。因此将方法的返回值分配给List 是一个编译错误。

如果您想要一个不修改基础集合的排序,如果您想急切枚举结果,请考虑使用OrderByToList

【讨论】:

    【解决方案2】:

    mylist.Sort(); 不返回List,它返回void,你不应该将它分配给一个列表。 致电Sort 后,您的整个列表都已完成。

    【讨论】:

      猜你喜欢
      • 2013-01-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-20
      • 1970-01-01
      相关资源
      最近更新 更多