这三种清除文本框的方法有什么区别?

Roc*_*cky 26 c# wpf textbox

我对以下三种清除文本框内容的方法感到有点困惑.我正在使用WPF并发现All正在工作,但我无法找到差异.

有人可以用一些例子向我解释一下吗?

  • txtUserName.Clear();
  • txtUserName.Text = string.Empty;
  • txtUserName.Text = "";

syn*_*ned 25

如果不是真的很深:

清除:从TextBox中删除内容,可能会删除随其分配的资源

    public void Clear()
    {
      using (this.TextSelectionInternal.DeclareChangeBlock())
      {
        this.TextContainer.DeleteContentInternal(this.TextContainer.Start, this.TextContainer.End);
        this.TextSelectionInternal.Select(this.TextContainer.Start, this.TextContainer.Start);
      }
    }
Run Code Online (Sandbox Code Playgroud)

将空字符串(因为string.Empty和""相等)分配给Text属性只需将空字符串分配给附加属性TextBox.TextProperty:

public string Text
{
  get
  {
    return (string) this.GetValue(TextBox.TextProperty);
  }
  set
  {
    this.SetValue(TextBox.TextProperty, (object) value);
  }
}
Run Code Online (Sandbox Code Playgroud)

  • 是以同样的方式,但在`this.SetValue(TextBox.TextProperty,(object)value)之后的幕后发生了什么;`?认为这是金钥匙. (3认同)

She*_*dan 19

Clear()方法不仅仅是删除文本TextBox.它删除所有内容并重置文本选择和插入符号@ syned的答案很好地显示.

对于txtUserName.Text = "";例如,框架将创建一个空的string对象,如果不已经在字符串池中存在,并且将其设置为Text属性.但是,如果""已在应用程序中使用该字符串,则Framework将使用池中的此值.

对于该txtUserName.Text = string.Empty;示例,Framework不会创建空string对象,而是引用空字符串常量,并将其设置为Text属性.

在性能测试中,已经显示(在In C#中,我应该使用string.Empty或String.Empty还是""? post)后两个示例之间确实没有任何有用的区别.调用Clear()方法肯定是最慢的,但这显然是因为它还有其他工作要做以及清除文本.即便如此,三种选择之间的性能差异仍然几乎无法察觉.