重写Contains()方法C#

时间:2013-04-22 15:50:00

标签: c# string

我有这个clausule

if ((line.Contains('%')) || (line.Contains('@')) || (line.Contains("") && (!line.Contains(','))))

我希望将它重写为一种方法,因为这太慢了。任何想法??

3 个答案:

答案 0 :(得分:9)

if(line.Intersect("%@,").Any())

if("%@,".Intersect(line).Any())

(撤消参数可能会提高效果,具体取决于line中的数据类型以及匹配的字符百分比。)

答案 1 :(得分:3)

其他答案似乎忽略了当line包含%@包含{时,原始代码返回true的事实{1}}。 (空字符串完全不相关)。

写这个的正确方法是:

,

或者可能:

if(line.Intersect("%@").Any() || !line.Contains(","))

或者这个:

char[] includes = { '%', '@' };
char[] excludes = { ',' };
if(line.Intersect(includes).Any() || !line.Intersect(excludes).Any())

答案 2 :(得分:1)

首先,让我们简化整个陈述。你使用许多钩子:

if (line.Contains('%') || line.Contains('@') || line.Contains("") && !line.Contains(','))

其次,如前所述,line.Contains(“”)将始终返回true。感到遗憾,你错过了一个空间或什么的。

最后,搜索字符串(或字符数组)以查找字符的正常情况是快速的!整个搜索操作只是汇编级别的一个简单操作(REP SCASW)。在这种情况下,您必须搜索多个字符,这将导致一个或多个简单的汇编指令。 C#中的其他语句更短,但可能不会更快。

在字符串中搜索字符串会稍微慢一些,所以请尝试删除Contains(“”)。

其他操作(使用LINQ或REGEX)可能会导致更多:内存操作(对于数组,委托,结果类型),更多分析(字符数组中的多个字符)等。