0

可能重复:
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...

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

4

2 回答 2

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
}
于 2012-07-01T19:50:43.880 回答
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

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

最后三行是参考比较,因为变量的编译时类型是对象。

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

于 2012-07-01T19:44:09.720 回答