可以对某些数组排序,但不能对其他数组排序
本文关键字:数组排序 但不能 其他 | 更新日期: 2023-09-27 18:02:25
我正在按反向字母顺序对文本框的行进行排序,并且我的代码工作得很好:
string[] temp = textBox.Lines;
Array.Sort(temp);
Array.Reverse(temp);
textBox.Lines = temp;
但是我很困惑为什么Visual Studio不让我这样做:
Array.Sort(textBox.Lines);
Array.Reverse(textBox.Lines);
我主要是想弄清楚c#的微妙之处,因为我还是个新手。
编辑:第二个片段没有错误,但它不执行任何代码(即似乎没有做任何事情)。
以下是TextBox.Lines
的几行getter:
public string[] Lines
{
get
{
string text = Text;
ArrayList list = new ArrayList();
...
...
return(string[]) list.ToArray(typeof(string));
}
您将获得一个新的集合,它具有来自TextBox
的数据的副本。您实际上并没有对TextBox
中的数据进行排序。
当void Array.Sort
对从该属性返回的数组进行排序时,原始TextBox
保持不变。
确实,您的数组将被排序和反转,但发生的是不会分配给TextBox
。修改Lines
数组没有效果,因为它是计算属性。
你需要将它分配给Lines
属性来查看效果。
来源
这是因为textBox。Lines不是作为类的成员变量公开的,而是作为属性公开的。在幕后,属性实际上是两个方法,例如get_Lines和set_Lines。关于get_Lines返回的数组,你只知道它是一个字符串数组。不能保证该属性是由一个实际的数组支持的——也许TextBox内部将文本保存为一个大字符串,然后在调用get_Lines时为您分解成几个部分。因此,当您对get_Lines的结果调用Sort()和Reverse()时,您不必修改内部列表。