Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/337.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#_Compact Framework - Fatal编程技术网

c#整数验证框架

c#整数验证框架,c#,compact-framework,C#,Compact Framework,使用.Net Compact Framework 2.0,如何验证整数(Int32.TryParse在Compact Framework上不受支持)?如果数字是字符串,则可以获取字符串字符数组,并检查每个字符的char.IsNumber是否为真 如果需要,请检查第一个字符是否为“-”,以允许使用负数,并添加try/catch块以防止超出范围(int-min/max-value)的数字。如果你不需要处理接近最小/最大值的数字,考虑设置最大长度(可能6-7位数),只需检查字符串。长度< /代码>代替

使用.Net Compact Framework 2.0,如何验证整数(
Int32.TryParse
在Compact Framework上不受支持)?

如果数字是字符串,则可以获取字符串字符数组,并检查每个字符的
char.IsNumber
是否为真

如果需要,请检查第一个字符是否为“-”,以允许使用负数,并添加try/catch块以防止超出范围(int-min/max-value)的数字。如果你不需要处理接近最小/最大值的数字,考虑设置最大长度(可能6-7位数),只需检查<代码>字符串。长度< /代码>代替。

如果您遇到的只是有效的
int
s和无效的
s是罕见的无效操作,那么您可以使用一个简单的try/catch块(请参阅我对ctackes答案的评论)。

您所说的“验证”是什么意思?你是说不扔东西就解析吗

static bool TryParse(string s, out int value)        
{
    try
    {
        value = int.Parse(s);
        return true;
    }
    catch
    {
        value = 0;
        return false;
    }
}
或:

static bool TryParseImpl(字符串s,int start,ref int value)
{
if(start==s.Length)返回false;
未经检查{
int i=开始;
做{
int newvalue=value*10+'0'-s[i++];
如果(value!=newvalue/10){value=0;返回false;}//立即检测非数字并溢出
值=新值;
}而(i

演示:

也有同样的问题。试试这个:

static bool numParser(string s)
{
  foreach (char c in s)
    if (!char.IsNumber(c))
      return false;
  return true;
}

“46973573441974124137729510604818689355170685471900754944636793”怎么办?
?取决于他期望的数字。检查符号是很容易添加的。为了防止出现大量数据,他可以使用try/catch块。这完全不应该发生,这取决于用例。
Char.IsNumber
绝对是错误的测试。“除了包括数字,数字还包括字符、分数、下标、上标、罗马数字、货币分子和包围圈的数字。”这也有它的注意事项。如果有足够多的非int字符串,则可能会出现性能问题,因为引发异常的成本相当高。我曾经使用过一种类似的模式,在某些情况下会减慢整个用户界面的速度。这种模式不考虑符号。也可以使用IsDigit。根据MSDN的说法:
除了包括数字外,数字还包括字符、分数、下标、上标、罗马数字、货币分子和环绕数字。
string int32s = "10240";
bool isInt = IsInt(int32s); // resolves true
string int32s = "1024a";
bool isInt = IsInt(int32s); // resolves false
  static bool TryParseImpl(string s, int start, ref int value)
  {
    if (start == s.Length) return false;
    unchecked {
      int i = start;
      do {
        int newvalue = value * 10 + '0' - s[i++];
        if (value != newvalue / 10) { value = 0; return false; } // detect non-digits and overflow all at once
        value = newvalue;
      } while (i < s.Length);
      if (start == 0) {
        if (value == int.MinValue) { value = 0; return false; }
        value = -value;
      }
    }
    return true;
  }

  static bool TryParse(string s, out int value)        
  {
    value = 0;
    if (s == null) return false;
    s = s.Trim();
    if (s.Length == 0) return false;
    return TryParseImpl(s, (s[0] == '-')? 1: 0, ref value);
  }
static bool numParser(string s)
{
  foreach (char c in s)
    if (!char.IsNumber(c))
      return false;
  return true;
}