相关疑难解决方法(0)

InvariantCulture和Ordinal字符串比较之间的区别

比较c#中的两个字符串是否相等,InvariantCulture和Ordinal比较之间有什么区别?

.net c# string-comparison ordinal

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

C#中字符串类型的最快(内置)比较是什么

C#中字符串类型最快的内置比较方法是什么?我不介意印刷/语义含义:目的是在排序列表中使用比较器,以便在大型集合中快速搜索.我认为只有两种方法:CompareCompareOrdinal.什么是最快的?

另外,这些字符串比较是否有更快的方法?

c# string performance

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

String.Equals(string1.Substring(0,x),string2)是否优于string1.StartsWith(string2)?

我正在使用字符串比较来测试URL路径StringComparison.OrdinalIgnoreCase.

MSDN提供了以下字符串比较建议这里,但没有说明为什么:

MSDN示例(在上一页的中间):

public static bool IsFileURI(string path) 
{
   path.StartsWith("FILE:", StringComparison.OrdinalIgnoreCase);
   return true;
}
Run Code Online (Sandbox Code Playgroud)

MSDN建议:

"但是,前面的示例使用String.StartsWith(String,StringComparison)方法来测试是否相等.因为比较的目的是测试相等而不是排序字符串,更好的选择是调用Equals方法,如如下例所示."

public static bool IsFileURI(string path)
{
   if (path.Length < 5) return false;

   return String.Equals(path.Substring(0, 5), "FILE:", 
                    StringComparison.OrdinalIgnoreCase);
}
Run Code Online (Sandbox Code Playgroud)

问题:为什么MSDN建议第二个例子更好?

讨论要点:

  1. 显然,return true;在第一个例子中是一个bug,应该是return path.StartsWith(...);.我们可以安全地忽略这一点,因为VB代码是正确的.

  2. 在比较相等性之前创建子字符串似乎只使用另一个内存资源,而不仅仅是调用String.StartsWith().

  3. 长度<5测试是一个很好的短路,但它可以与之前的代码一样使用.

  4. 第二个例子可以被解释为更清晰的代码,但我关注的是性能.子串的创建似乎是不必要的.

.net c#

13
推荐指数
1
解决办法
2043
查看次数

标签 统计

c# ×3

.net ×2

ordinal ×1

performance ×1

string ×1

string-comparison ×1