English 中文(简体)
c#变量使用[关闭]
原标题:c# Variable uses [closed]
Closed. This question is opinion-based. It is not currently accepting answers.

想改进这个问题吗 通过编辑此帖子,更新问题,以便用事实和引用来回答。

Closed 10 years ago.

我使用c#winf或ms,想知道如何更好地编写以及为什么。

if(txtName.Text == "John")
    ;

String name = txtName.Text
if (name == "John")
    ;

编辑:谢谢你们帮了我很多!!!

最佳回答

第二个版本毫无意义——它更长,可读性更低,并引入了一个额外的变量(尽管一个好的编译器会去掉它,假设它没有在其他地方使用)。

在这两个选项中,这个更好:

if(txtName.Text == "John")

虽然我会选择第三种:

if(txtName.Text.Equals("John", StringComparison.InvariantCultureIgnoreCase)

您可能需要StringComparison选项为不同的枚举值,具体取决于您希望进行比较的方式。

问题回答

为了简单起见,我会选择:

if(txtName.Text.Equals("John"))

也许我错了,但其他人正在回答一些复杂的情况,而不是OP提出的情况。

什么更好?

事实上,这是一样的。有一个区别:第一种方法是将控件的文本存储在变量中,然后检查它是否等于John。第二种方法做同样的事情,但它通过调用text属性直接获取控件的文本访问其字符串值。

何时使用变量,何时直接访问属性?这只是一个假设,因为这将取决于每个特定的用例,但一般来说,如果你访问它的对象(文本)只是为了在一段时间内检查它,会直接调用Text属性,否则,如果:

  • 如果你想在不影响此文本的情况下与Text进行连接(如果你将其连接到Text

  • 您处于多线程环境中,希望将文本保持在当前状态,因为它可以更改,因为用户界面对用户可用,并且可以在某些操作期间更改其值。

  • 你只是喜欢变量

仅此而已。

阅读在.NET Framework中使用字符串的最佳实践

if (String.Equals(txtName.Text, "John", StringComparison.OrdinalIgnoreCase)) {
   // ...Code.
}

对于字符串比较,我建议:

string.compare(strA, strB, stringComparisonMethod)

对于访问文本来说,这并不重要,第二种方式更友好,但两者都会做同样的事情

我认为后者更好,因为你将使用更少的变量,即name。除了我看不出有什么区别(造型显然取决于你自己)

如果你在代码的其他部分使用这个值,我会定义一个变量。否则,请使用较短的版本。

在C#中,你不必使用。等于比较字符串(响应注释)。==做同样的事情。

if(txtName.Text == "John")

这是您所展示的更传统、更有效的方法。

String name = txtName.Text
if (name == "John")
    ;

声明额外的变量“name”将增加代码大小,除了增加程序内存外,还有其他好处。有一次,我尝试并发现声明额外的变量并为其分配文本,然后访问此变量而不是文本属性txtName。文本使其效率低于通过属性访问。





相关问题
Anyone feel like passing it forward?

I m the only developer in my company, and am getting along well as an autodidact, but I know I m missing out on the education one gets from working with and having code reviewed by more senior devs. ...

NSArray s, Primitive types and Boxing Oh My!

I m pretty new to the Objective-C world and I have a long history with .net/C# so naturally I m inclined to use my C# wits. Now here s the question: I feel really inclined to create some type of ...

C# Marshal / Pinvoke CBitmap?

I cannot figure out how to marshal a C++ CBitmap to a C# Bitmap or Image class. My import looks like this: [DllImport(@"test.dll", CharSet = CharSet.Unicode)] public static extern IntPtr ...

How to Use Ghostscript DLL to convert PDF to PDF/A

How to user GhostScript DLL to convert PDF to PDF/A. I know I kind of have to call the exported function of gsdll32.dll whose name is gsapi_init_with_args, but how do i pass the right arguments? BTW, ...

Linqy no matchy

Maybe it s something I m doing wrong. I m just learning Linq because I m bored. And so far so good. I made a little program and it basically just outputs all matches (foreach) into a label control. ...