可以排序一些数组而不是其他数组?

时间:2014-05-07 16:41:36

标签: c# arrays sorting

我按反向字母顺序对文本框的行进行排序,我的代码工作正常:

string[] temp = textBox.Lines;
Array.Sort(temp);
Array.Reverse(temp);
textBox.Lines = temp;

但我很困惑为什么Visual Studio不允许我这样做:

Array.Sort(textBox.Lines);
Array.Reverse(textBox.Lines);

主要是我试图找出C#的微妙之处,因为我还不熟悉它。

编辑:第二个代码段并没有错误输出,但它没有执行任何代码(即似乎没有做任何事情)。

3 个答案:

答案 0 :(得分:3)

这里是TextBox.Lines的吸气剂的几行:

public string[] Lines
{ 
    get
    { 
        string text = Text;
        ArrayList list = new ArrayList();

        ...
        ...

        return(string[]) list.ToArray(typeof(string));
    }

您正在获取一个新集合,其中包含来自TextBox的数据的副本。您实际上并未对TextBox中的数据进行排序。

void Array.Sort对从该属性传回的数组进行排序时,原始TextBox保持不变。

答案 1 :(得分:2)

实际上,您的数组将被排序和反转,但会发生的情况是不会将其分配给TextBox。修改Lines数组没有任何效果,因为它是计算属性。

您需要将其分配到Lines属性以查看效果。

以下是对source

的引用

答案 2 :(得分:0)

这是因为textBox.Lines不是作为类的成员变量公开,而是作为属性公开。在幕后,一个属性实际上是两种方法,例如get_Lines和set_Lines。你从get_Lines得到的数组所知道的就是它是一个字符串数组。无法保证该属性由实际数组支持 - 也许TextBox将文本内部保留为一个大字符串,然后在调用get_Lines时将其分成几部分。因此,当您对get_Lines的结果调用Sort()和Reverse()时,您不必修改内部列表。