Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/257.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 若字符串包含字母,抛出错误?_C#_Asp.net Mvc_String - Fatal编程技术网

C# 若字符串包含字母,抛出错误?

C# 若字符串包含字母,抛出错误?,c#,asp.net-mvc,string,C#,Asp.net Mvc,String,传入字符串列表: List<string> quantity 我怎么能说q是一个字母 感谢您的回复您可以使用LINQ扩展方法: if (!q.All(Char.IsDigit)) { // not only digits } 您可以使用,下面是一个简短的LINQ版本,用于检查任何字符串是否包含字母: bool anyWrong = quantity.Any(s => s.Any(Char.IsLetter)); 或者相反,使用以下方法检查所有内容是否有效: 另一个选项

传入字符串列表:

List<string> quantity
我怎么能说q是一个字母


感谢您的回复

您可以使用LINQ扩展方法:

if (!q.All(Char.IsDigit)) {
  // not only digits
}
您可以使用,下面是一个简短的LINQ版本,用于检查任何字符串是否包含字母:

bool anyWrong = quantity.Any(s => s.Any(Char.IsLetter));
或者相反,使用以下方法检查所有内容是否有效:

另一个选项是检查是否可以将所有字符串解析为
int
long
,例如:

long l;
bool allCorrect = quantity.All(s => long.TryParse(s, out l));
如果还希望允许指数表示法,则可以将
decimal.TryParse
numberstyle.Float
一起使用:

List<string> quantity = new List<string> { "1000000000E-100" };
decimal d;
bool allCorrect = quantity
   .All(s => decimal.TryParse(s, NumberStyles.Float, CultureInfo.InvariantCulture, out d));
列表数量=新列表{“1000000000E-100”};
十进制d;
bool allCorrect=数量
.All(s=>decimal.TryParse(s,NumberStyles.Float,CultureInfo.InvariantCulture,out d));

因为您已将其标记为MVC。。您应该使用数据注释来验证属性。例如:

public class YourModel {
    public IList<QuantityModel> Quantities { get; set; }
}

public class QuantityModel {
    [RegularExpression(@"\d+")] // <--- this
    public int Amount { get; set; }
}
公共类模型{
公共IList数量{get;set;}
}
公共类量化模型{
[RegularExpression(@“\d+”)]/假设您只接受正整数,您应该检查列表中的每个字符串是否为空或null,是否包含除数字以外的任何内容(不仅是字母“A”…'Z”,“A”…'Z',而是,比如“+”,“{”,命令字符等)。您可以通过LINQ执行此操作:

  // All strings within quantity contains digits only
  if (!quantity.All(c => (!String.IsNullOrEmpty(c)) && c.All(Char.IsDigit(c)))) {
    _notifier.Information(T("A letter has been entered for quantity. Please enter a number"));

    return Redirect(returnUrl);
  }

这也包括控制字符吗?@thumbmunkeys:查看上面链接的两个msdn页面的备注部分,看看包含哪些字符。@PaulZahra:不,控制字符或空格不是字母或数字。不,
1.000000000 E100
如果选中
s.All(Char.IsDigit),将返回
false
。但这取决于OP对此类字符串是否为有效数字的要求。您可以使用
long.TryParse
,而不是前面提到的。@TimSchmelter确实如此,这就是为什么我删除了您文章中的观点,并将其贴在OP上。@PaulZahra:我已经编辑了我的答案,以提供一种方法,允许使用甚至是指数符号的notation.q是字符串列表而不是字符串;)@ArsenMkrt:不,它不是。变量
quantity
保存字符串列表。变量
q
在循环中用于引用列表中的每个字符串。@ArsenMkrt当您使用Linq对其进行迭代时,它将成为一个字符集合。该代码工作得非常完美。如果您是指从循环,而不是我宁愿检查q.Any(Char.isleter),如果第一个符号是letter@ArsenMkrt:这将只检查字母,但像
“/&·%/&%”这样的字符串
不包含字母,但仍然无法将其解析为数字。此外,如果任何字符串失败,性能并不重要,因为这将导致重定向,在正常情况下,所有字符串都通过了,您必须遍历所有字符串中的所有字符,因此没有提前退出。说1.000000000E100 i是否正确s有效还是无效?虽然是有效数字,但它也包含一个字母。为什么不使用
列表
public class YourModel {
    public IList<QuantityModel> Quantities { get; set; }
}

public class QuantityModel {
    [RegularExpression(@"\d+")] // <--- this
    public int Amount { get; set; }
}
  // All strings within quantity contains digits only
  if (!quantity.All(c => (!String.IsNullOrEmpty(c)) && c.All(Char.IsDigit(c)))) {
    _notifier.Information(T("A letter has been entered for quantity. Please enter a number"));

    return Redirect(returnUrl);
  }