C# 如何简化if语句字符串检查?
我有一个接受字符串的方法,我想返回true或false,这取决于之前是否记录了该字符串 到目前为止,我掌握的情况如下:C# 如何简化if语句字符串检查?,c#,c#-4.0,C#,C# 4.0,我有一个接受字符串的方法,我想返回true或false,这取决于之前是否记录了该字符串 到目前为止,我掌握的情况如下: string one = "abc"; string two = "def"; string three = "ghi"; MethodOne(string s) { if (s == one || s == two || s == three) return true; else return false; } 现在有没
string one = "abc";
string two = "def";
string three = "ghi";
MethodOne(string s)
{
if (s == one || s == two || s == three)
return true;
else
return false;
}
现在有没有更简单的方法来简化这个过程,而不需要使用大量的| |和单个字符串检查
将其放入字符串数组并仅使用
if (array.contains(s))
或者类似的东西,其中数组是要检查的字符串列表 如果要将一个字符串与其他几个字符串进行比较,可以使用
集合
简化代码,例如数组
。然后可以检查数组中是否存在要查找的字符串:
return new [] { one, two, three }.Contains(s);
另一种选择是使用以下方法:
当然,有很多方法可以做到这一点。但主要的一点是选择正确的数据结构来简化代码并使其尽可能简单易读。如果要将一个字符串与其他几个字符串进行比较,您可以使用
集合
简化代码,例如数组
。然后您可以检查数组中是否存在要查找的字符串:
return new [] { one, two, three }.Contains(s);
另一种选择是使用以下方法:
当然,有很多方法可以做到这一点。但主要的一点是选择正确的数据结构来简化代码,并使其尽可能简单易读。正如您所建议的,最好创建一个集合,然后检查其中是否存在值
public bool MethodOne(string s)
{
List<string> collection = new List<string>() {"abc", "def", "ghi"};
return collection.Contains(s);
}
public bool MethodOne(字符串s)
{
列表集合=新列表(){“abc”、“def”、“ghi”};
退货收集。包含(个);
}
正如您所建议的,最好创建一个集合,然后检查其中是否存在值
public bool MethodOne(string s)
{
List<string> collection = new List<string>() {"abc", "def", "ghi"};
return collection.Contains(s);
}
public bool MethodOne(字符串s)
{
列表集合=新列表(){“abc”、“def”、“ghi”};
退货收集。包含(个);
}
如果您更关心速度和清晰度而不是内存,也可以使用哈希集:
var hashSet = new HashSet<string> { "abc", "def", "ghi" };
hashSet.Contains("abc");
var hashSet=newhashset{“abc”、“def”、“ghi”};
hashSet.Contains(“abc”);
如果您更关心速度和清晰度而不是内存,也可以使用哈希集:
var hashSet = new HashSet<string> { "abc", "def", "ghi" };
hashSet.Contains("abc");
var hashSet=newhashset{“abc”、“def”、“ghi”};
hashSet.Contains(“abc”);
<代码> > p>如果您知道编译时的值或检查是主导操作(而不是MODEYFET集合),请考虑二进制搜索。它执行签入O(对数n)时间(包含
或任何
取O(n)-线性):
记住,输入数组应该保持排序
O(logn)在检查大集合时很重要。如果你知道编译时的值或者检查是主导操作(而不是MODEYFET集合),那么考虑二进制搜索。它执行签入O(对数n)时间(包含
或任何
取O(n)-线性):
记住,输入数组应该保持排序
O(logn)在检查大集合时很重要。这是一个带有比较的示例表
将其放入字符串数组并仅使用
if(数组包含)
或者类似的东西,其中数组是要检查的字符串列表
反对
是的,最好将需要对照字符串s
检查的所有字符串包含到数组或类似结构中
据我所知,考虑到其他字符串,这是检查字符串相等性的最佳选择,因为它大大提高了可读性。
此表格:
var arr = new[] {"abc", "def", "ghi"};
return arr.Contains(s);
比以下内容更具可读性:
if (s == one || s == two || s == three)
return true;
else
return false;
这样,对另一个程序员的操作就会更清晰。
选择此表单的另一个原因是,这将使程序在将来更易于维护。如果您需要对照另一个字符串检查您的字符串,该怎么办?只需在数组或集合中插入另一个元素,而无需在if
语句中检查另一个字符串:
if (s == one || s == two || s == three || s == four)
很明显,这份声明很难维护,读起来也很可怕
关于要使用的集合,我认为数组对于您的任务来说已经足够了,但是正如其他用户所指出的,还有其他好的选择,例如列表
或哈希集
将其放入字符串数组并仅使用
if(数组包含)
或者类似的东西,其中数组是要检查的字符串列表
反对
是的,最好将需要对照字符串s
检查的所有字符串包含到数组或类似结构中
据我所知,考虑到其他字符串,这是检查字符串相等性的最佳选择,因为它大大提高了可读性。
此表格:
var arr = new[] {"abc", "def", "ghi"};
return arr.Contains(s);
比以下内容更具可读性:
if (s == one || s == two || s == three)
return true;
else
return false;
这样,对另一个程序员的操作就会更清晰。
选择此表单的另一个原因是,这将使程序在将来更易于维护。如果您需要对照另一个字符串检查您的字符串,该怎么办?只需在数组或集合中插入另一个元素,而无需在if
语句中检查另一个字符串:
if (s == one || s == two || s == three || s == four)
很明显,这份声明很难维护,读起来也很可怕
关于要使用的集合,我认为数组对于您的任务来说已经足够了,但是正如其他用户所指出的,还有其他好的替代方法,例如列表
或哈希集
。数组有什么问题?检查给定项是否与数组中的某个项匹配的最简单方法。你不会找到更好的替代品的。我想那会很好,只是想知道是否还有其他替代品?这更多的是因为我只是在学习c#,并且对做事情的其他方法很好奇。“把它放在一个字符串数组中,只使用array.contains会更好吗?”只有你知道它是否对你更有利。@SamIAm老实说,如果你只是在学习,我会把精力集中在其他领域而不是其他领域