我按反向字母顺序对文本框的行进行排序,我的代码工作正常:
string[] temp = textBox.Lines;
Array.Sort(temp);
Array.Reverse(temp);
textBox.Lines = temp;
但我很困惑为什么Visual Studio不允许我这样做:
Array.Sort(textBox.Lines);
Array.Reverse(textBox.Lines);
主要是我试图找出C#的微妙之处,因为我还不熟悉它。
编辑:第二个代码段并没有错误输出,但它没有执行任何代码(即似乎没有做任何事情)。
答案 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()时,您不必修改内部列表。