我知道在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...
它就像我想要的那样工作。但这是好编码吗?找不到有关此特定主题的任何信息。
答案 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#
中是不可变的