我喜欢Linq这样的问题:
bool validA = sname.All(c => Char.IsLetterOrDigit(c) || c.Equals('_'));
您validA
每次都要分配,而不检查其先前的值.现在,您始终可以获得上次执行检查的值.
你可以'和'结果:
validA &= (char.IsLetterOrDigit(snameA[i]) || snameA[i] == '_');
这意味着您仍然可以运行所有字符,如果第一次检查失败,这可能毫无用处.如果它失败,最好简单地走出去:
for(int i = 0; i<=snameA.Length-1; i++) { validA = (char.IsLetterOrDigit(snameA[i]) || snameA[i] == '_'); if (!validA) { break; } // <-- see here }
或者使用LINQ:
validA = snameA.All(c => char.IsLetterOrDigit(c) || c == '_');