在c#中的return语句中使用List <String>的行为

now*_*ed. 0 .net c# visual-studio-2010

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();

    }
}
Run Code Online (Sandbox Code Playgroud)

抛出编译错误:

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

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

Jon*_*eet 8

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

List<T>.Sort()方法返回List<T>.这是一种void方法 - 它对列表进行了排序.你需要:

a.Sort();
return a;
Run Code Online (Sandbox Code Playgroud)

基本上,具有void返回类型的方法只能用作独立语句.您不能将它用作返回的表达式,也不能用作方法参数等.

  • 呸!你太快了! (3认同)
  • @nowhewhomustnotbenamed:你不能使用`List <T> .Sort()`的赋值,原因完全相同 - *它不返回任何东西*.该列表"就地"排序.它并不是真正通过引用传递,但您需要了解引用类型.请参见http://pobox.com/~skeet/csharp/references.html (2认同)

akt*_*ton 5

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