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

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

嗯.. 第一个警告,这个答案有可能超出大多数开发人员目前的共识,但这里是:) 尝试阅读它直到最后。

这两个(甚至我包括的另外一个)完全相同:

txtUserName.Text = "";

txtUserName.Text = string.Empty;

txtUserName.Text = null;

即使调试配置中的程序集可能会出现一些不同,我很肯定

在更优化的发布模式下它们将编译为完全相同的程序集。

如果它们的结果不同 - 这意味着编译器以最佳翻译方式翻译此案例的代码议程的能力下降,或者换句话说..在其他语言中,这可能来自同一个程序集并且来自它的学术愿景 - 它应该作为同一个程序集出现。但并不是每个编译器都关心那么多的学术观点:)

关于第三个家伙txtUserName.Clear(),这是一个不同的情况,我假设就像你一样,这个方法的内部实现实际上做或只是使用这三个任务中的一个.. (正如其他人已经提到的那样,它所做的不仅仅是从删除字符文本)

但是,如果您认为面向对象-假设有人想要创建一个特殊的文本框,其中包括例如要清除的更多内容-对他来说,使用“清除”方法来覆盖将非常方便..如果您使用了 clear 方法 - 当您从基本文本框更改为新的自定义/特殊 texbox 时,您不会更改代码。

所以总结一下 - 如果你要使用控件,你应该使用它的方法,这意味着当你想要清除它时使用'Clear()'方法将更合适,特别是如果你想要在未来的某一天用您自己的自定义文本框替换该文本框。所以至少在语法上它是更好的选择。

但是是的,如果你想要的只是从文本属性中删除字符,它会影响性能。

这里有一个小程序来测试WPF下各个的效率。

xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

Title="MainWindow" Height="350" Width="525">

using System;

using System.Windows;

namespace WpfApplication4

{

///

/// Interaction logic for MainWindow.xaml

///

public partial class MainWindow : Window

{

public MainWindow()

{

InitializeComponent();

DateTime oldTime, newTime;

TimeSpan delta;

var iterations = 100000;

#region Test performance 1

oldTime = DateTime.Now;

for (var i = 0; i < iterations; i++)

txtbx1.Text = "";

newTime = DateTime.Now;

delta = newTime - oldTime;

txtbx1.Text = delta.Milliseconds.ToString();

#endregion

#region Test performance 2

oldTime = DateTime.Now;

for (var i = 0; i < iterations; i++)

txtbx2.Text = string.Empty;

newTime = DateTime.Now;

delta = newTime - oldTime;

txtbx2.Text = delta.Milliseconds.ToString();

#endregion

#region Test performance 3

oldTime = DateTime.Now;

for (var i = 0; i < iterations; i++)

txtbx3.Text = null;

newTime = DateTime.Now;

delta = newTime - oldTime;

txtbx3.Text = delta.Milliseconds.ToString();

#endregion

#region Test performance 4

oldTime = DateTime.Now;

for (var i = 0; i < iterations; i++)

txtbx4.Clear();

newTime = DateTime.Now;

delta = newTime - oldTime;

txtbx4.Text = delta.Milliseconds.ToString();

#endregion

}

}

}

这些是我得到的结果:43、40、73、443

它是一致的 - 前两个大约相同 +/- 微秒或两个,第三个总是略长,最后一个肯定比所有其他人都长。

我认为这已经很深了:)

更多创意作品