【发布时间】:2011-08-31 08:10:17
【问题描述】:
我希望允许用户输入字符、数字和特殊字符,但不允许输入 ascii 值大于 127 的垃圾字符(例如 ♠ ♣ 等)。
我有这样的功能
for (int i = 0; i < value.Length; i++) // value is input string
{
if ((int)value[i] < 32 || (int)value[i] > 126)
{
// show error
}
}
这会使代码变慢,因为我必须比较每个字符串及其字符。 任何人都可以提出更好的方法吗?
【问题讨论】:
-
除非你有一些非常大的字符串,否则这段代码应该很快。我不希望它有任何性能问题。
-
这可能是使用 Regex 或 LINQ 的好地方。
-
@Tim,
for循环将是最快的。如果它对 OP 来说不够快,那么 Regex 会更糟。 -
@xanatos:我不同意:使用 LINQ 可以让您在整个代码库中编写非常易读的代码,这意味着您可以分析瓶颈发生的位置并微优化只是那些位 i> 如有必要。在许多情况下,LINQ 的简单性实际上使您可以表达比手写更有效的解决方案,仅仅是因为这样做很容易。手动编码有效的解决方案可能最终过于复杂。
-
@Sangram 你写的可能是最快的方法。唯一的事情:您不需要强制转换为 int。