如何以正确的方式比较字符串和文本?

时间:2012-07-01 19:41:34

标签: c#

  

可能重复:
  Differences in string compare methods in C#

我知道在C#字符串中是对象,我在比较两个字符串时只学习了CompareTo方法。但是如果我需要将字符串与特定的文本值进行比较呢?

现在我正在这样做:

private string choice;

[...some code...]

if (choice == "1")
        {
            Console.WriteLine("You choose 1");
            Console.ReadLine();
        }
        else if (choice == "2")
        {
            Console.WriteLine("You choose 2");
            Console.ReadLine();
        }
etc...

它就像我想要的那样工作。但这是好编码吗?找不到有关此特定主题的任何信息。

2 个答案:

答案 0 :(得分:4)

使用内置比较机制比较字符串通常更好, 因为他们会清楚说明你在做什么。

例如:

public void Compare()
{
    string s1 = "2";
    string s2 = "" + 2;
    string.Equals(s1, s2, StringComparison.InvariantCultureIgnoreCase);
}

每个人都可以在这里看到,你会忽视这种情况而文化则不会 与此比较相关。

在你的特殊情况下,我会考虑使用TryParse 你将在这里有一个整数:

int result;

if (Int32.TryParse(s1, out result))
{
    // choice is valid
}

答案 1 :(得分:1)

您可以安全地将字符串引用与字符串文字进行比较。

有一些边缘情况,编译时间很重要

string a = "this is a";
string b = a;
string c = "this is " + x; //x has the value of 'a'
string d = "this is a";
object oa = a;
object ob = b;
object oc = c;
object od = d;

console.WriteLine(a == b); //will print true
console.WriteLine(a == c); //will print true
console.WriteLine(c == b); //will print true

console.WriteLine(oa == ob); //will print true
console.WriteLine(oa == oc); //will print false
console.WriteLine(oa == od); //will print true

在最后三行中是一个值比较,只要字符串对象的值相同,结果就是真。

在最后三行中,它是一个参考比较,因为变量的编译时类型是object。

a和b将成为同一个对象,因此第一个比较将返回true。但是oa和oc不会是同一个对象。编译器无法确定它们实际上是相同的字符串值。最后一行也将返回true。这是因为编译器将在编译时实现a和d具有相同的字符串值,因此只创建一个字符串对象。它可以安全地执行此操作,因为字符串在C#

中是不可变的