相关疑难解决方法(0)

==和等于()之间的C#差异

我在Silverlight应用程序中有一个比较2个字符串的条件,由于某种原因,当我使用==它时返回false.Equals()返回true.

这是代码:

if (((ListBoxItem)lstBaseMenu.SelectedItem).Content.Equals("Energy Attack"))
{
    // Execute code
}

if (((ListBoxItem)lstBaseMenu.SelectedItem).Content == "Energy Attack")
{
    // Execute code
}
Run Code Online (Sandbox Code Playgroud)

任何理由为什么会这样?

.net c# equals

519
推荐指数
9
解决办法
28万
查看次数

不同的字符串比较方法有什么区别

可能重复:
C#中字符串比较方法的差异

在.NET中有许多字符串比较方法,我只是想确认哪一个是最好的考虑性能.

string.Equals()

string.Compare()

string.CompareTo()

string.CompareOrdinal()

string.ReferenceEquals()

if (str1 == str2)
Run Code Online (Sandbox Code Playgroud)

.net c# string-comparison

36
推荐指数
1
解决办法
3万
查看次数

在C#中确定未修剪字符串是否为空的最有效方法是什么?

我有一个字符串,周围可能有空格字符,我想检查它是否基本上是空的.

有很多方法可以做到这一点:

1  if (myString.Trim().Length == 0)
2  if (myString.Trim() == "")
3  if (myString.Trim().Equals(""))
4  if (myString.Trim() == String.Empty)
5  if (myString.Trim().Equals(String.Empty))
Run Code Online (Sandbox Code Playgroud)

我知道这通常是过早优化的明显案例,但我很好奇,并且有可能做到这一点足以产生性能影响.

那么哪一个是最有效的方法呢?

有没有更好的方法我没想过?


编辑:此问题的访问者注意事项:

  1. 对这个问题进行了一些非常详细的调查 - 特别是来自Andy和Jon Skeet.

  2. 如果你在搜索某些内容时偶然发现了这个问题,那么至少阅读Andy和Jon的帖子是非常值得的.

似乎有一些非常有效的方法,有效的方法取决于我需要处理的字符串的内容.

如果我无法预测字符串(在我的情况下我不能预测),Jon的IsEmptyOrWhiteSpace方法似乎通常更快.

谢谢大家的意见.我将选择安迪的答案作为"正确"的答案仅仅是因为他应该为他所付出的努力赢得声誉,而乔恩已经拥有了十亿美元的声誉.

c# string optimization performance coding-style

14
推荐指数
2
解决办法
2202
查看次数

VB.NET:如果我将String ByVal传递给函数但不更改字符串,我在内存中是否有一个或两个字符串?

我知道字符串是不可变的,所以当你更改字符串引用的值时,.NET会在堆上创建一个全新的字符串.

但是如果你不改变字符串引用的值呢?相反,你只需将它传递给一个函数ByVal- 这个操作是否也复制了堆上的字符串值?我倾向于"不",但我想证实.

例如:

Public Function IsStringHello(ByVal test As String) As Boolean 
  Return (String.Compare(test, "Hello") = 0)    
End Function
Run Code Online (Sandbox Code Playgroud)

通话程序:

Dim myWord as String = "Blah"
Dim matchesHello as Boolean = IsStringHello(myWord)
Run Code Online (Sandbox Code Playgroud)

我知道myWord按值传递会产生"Blah" 引用的副本,但由于我没有尝试更改字符串本身,它是否会在堆上创建另一个字符串副本?

vb.net string byref byval

7
推荐指数
1
解决办法
1万
查看次数