C# 我是不是用错了?
我身上发生了奇怪的事。我必须履行以下职能:C# 我是不是用错了?,c#,string,contains,C#,String,Contains,我身上发生了奇怪的事。我必须履行以下职能: private string CategoryByName(string path) { path.ToLower(); if (path.Contains("obs") || path.Contains("obst")||path.Contains("birthing")) return "Birthing"; if (path.Contains("sbu2")||(!path.Contains("sb
private string CategoryByName(string path) {
path.ToLower();
if (path.Contains("obs") || path.Contains("obst")||path.Contains("birthing")) return "Birthing";
if (path.Contains("sbu2")||(!path.Contains("sbu3")&&path.Contains("gyn"))) return "Gynecology SBU2";
if (path.Contains("sbu3")) return "Gynecology SBU3";
if (path.Contains("dia") || path.Contains("sprint")||(path.Contains("strechers"))) return "Strechers";
if (path.Contains("one_day") || path.Contains("one day") || (path.Contains("oda"))) return "One-day care";
return "";
}
我浏览了一个文件名列表。包括例如“INDO OBST.xlsx”,它应返回为“Birthing”,但返回为“” Contains区分大小写,从ToLower()判断,您知道这一点。
但是,ToLower()不操纵path变量。相反,您应该重新分配它。您可以通过将
path.ToLower()
更改为path=path.ToLower()
来执行此操作。ToLower方法返回调整后的字符串:
path = path.ToLower();
编写一个如下所示的扩展方法:
public static class Extensions
{
public static bool ContainsNoCase(this string stringToLookIn, string stringToFind)
{
return stringToLookIn.IndexOf(stringToFind, StringComparison.OrdinalIgnoreCase) >= 0;
}
}
并使用
ContainsNoCase
代替Contains
path=path.ToLower()
-ToLower()
返回一个新字符串,它不会(也不能)更改path.God中的现有字符串。非常感谢。或者编写您自己的Contains方法,使用String.IndexOf
重载进行字符串比较:在path.Contains(“obs”)| | path.Contains(“obst”)
中有一个更完全不相关的细节,但是在path.Contains(“obst”)
中,对path.Contains(“obst”)
的测试是多余的,因为包含“obst”的字符串显然也将始终包含“obs”;-)ToUpperInvariant
是这样做的必要条件:@kara这仍然需要您重新分配变量。与其他答案所建议的调用ToLower
相比,它的一个优点是不会创建不必要的临时字符串。被否决的投票人是否愿意评论他/她的理由。这是可行的,并且不需要为每次比较创建新字符串(通过ToLower
或ToUpper
)。它还提供了非常清晰的代码。有趣的是,这个问题的每个答案都有一个反对票。