c#整数验证框架
使用.Net Compact Framework 2.0,如何验证整数(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位数),只需检查字符串。长度< /代码>代替
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;
}