【问题标题】:Behaviour of List<String> when using in return statement in c#在 c# 中使用 in return 语句时 List<String> 的行为
【发布时间】:2012-09-05 14:36:44
【问题描述】:
class A
{
    public static List<String> a = new List<string>();

    public static List<String> test()
    {
        A.a.Add("20");
        A.a.Add("30");
        A.a.Add("40");
        return a.Sort();

    }
}

抛出编译错误:

无法将 void 隐式转换为 System.Collections.Generic.List。

但是,如果我编写一个方法来获取List&lt;String&gt; 值(因为它是静态成员变量),一切都应该可以正常工作。但是,我不知道为什么尽管我的方法返回了 List&lt;String&gt; 值,为什么编译器会抛出这个错误?

【问题讨论】:

  • 哇!我的方法没有返回 List 值。因为,我使用了返回 void 值的 sort(),所以会显示错误。太棒了……要学很多东西……

标签: c# .net visual-studio-2010


【解决方案1】:

但是,我不知道为什么尽管我的方法返回一个 List 值,为什么编译器会抛出这个错误?

List&lt;T&gt;.Sort() 方法返回List&lt;T&gt;。这是一个void 方法 - 它对列表进行适当的排序。你需要:

a.Sort();
return a;

基本上,返回类型为void 的方法只能用作独立语句。您不能将其用作要返回的表达式,也不能用作方法参数等。

【讨论】:

  • 这是否意味着我们不需要分配 a = a.Sort() 来将已排序的元素移动到 a ?它是否自动排序(我是 C# 新手。我想它应该类似于通过引用传递列表本身排序的地方?)
  • @nowhewhomustnotbenamed.:您不能对 List&lt;T&gt;.Sort() 使用赋值,原因完全相同 - 它不会返回任何内容。该列表按“就地”排序。它并不是真正的按引用传递,但您确实需要了解引用类型。见pobox.com/~skeet/csharp/references.html
  • 实际上我需要从列表中获取不同的值。我能不能发现 distinct() 方法可以像 a.Distinct() 一样使用。这是正确的方法吗?
  • @nowhewhomustnotbenamed.: 不,因为这是一种 LINQ 方法,而 LINQ 是基于对基础数据源进行更改。在我看来,您应该放慢速度——学习 C# 的基础(例如引用类型的工作原理),然后学习诸如集合之类的核心库,然后 LINQ。否则你只会把自己弄糊涂。
  • 是的,Jon.. 最初开始学习 LINQ,是的,如果没有基础知识,它会很混乱。我必须从头开始。好的。但是,如果我在这里不使用 Distinct() 方法,那么如何对元素进行排序呢?为什么你说 LINQ 会减慢这种编码速度?我在某个地方学习过 LINQ 是 C# 中的一个新特性,而且速度很快。如果这很愚蠢,请见谅。
【解决方案2】:

问题是a.Sort() 没有返回值 - 它返回 void。见http://msdn.microsoft.com/en-us/library/b0zbh7b6.aspx。在底部添加一行 return a;

【讨论】:

    【解决方案3】:

    sort 是 void 函数,它只对您的列表进行排序并且不返回列表 使用下面的代码

      class A
        {
        public static List<String> a = new List<string>();
    
        public static List<String> test()
        {
            A.a.Add("20");
            A.a.Add("30");
            A.a.Add("40");
           A.a.Sort();
             return a;
        }
    
    }
    

    【讨论】:

      猜你喜欢
      • 2023-03-27
      • 2016-09-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-17
      相关资源
      最近更新 更多