2011-07-03 7 views
4

.Net Compact Framework 2.0を使用すると、整数を検証するにはどうすればよいですか(Int32.TryParseはCompact Frameworkではサポートされていません)。c#integer validation compactframework

+0

http://stackoverflow.com/questions/363158/net-compact-framework-tips-tricks-and-gotchas – bevacqua

答えて

0

数字が文字列の場合は、文字列char配列を取得し、すべての文字に対してChar.IsNumberがtrueであるかどうかを確認することができます。

負の数が必要な場合は、最初の文字が ' - 'であることを確認し、範囲を超える数値(int最小/最大値)から保護するtry/catchブロックを追加します。 min/maxに近い数値を扱う必要がない場合は、最大長(多分6〜7桁)を設定し、代わりにstring.Lengthを単にチェックすることを検討してください。

偶然に遭遇する可能性があるのは、有効なintであり、無効な操作がまれである場合は、単純なtry/catchブロックを使用する可能性があります(私のコメントはctackesの回答を参照してください)。

+0

何 'については "-1"'? – user7116

+0

'' 4697357344197412413772951060481818689355170685471900754944636793 ''についてはどうですか? – jason

+0

彼が期待している数字に依存します。サインを確認するのは簡単です。本当に大きな数字から守るために、彼はtry/catchブロックを使うかもしれません。これは、ユースケースによってはまったく発生しません。 – Zebi

3

「検証する」とはどういう意味ですか?あなたは投げることなく解析するのですか?

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

これにも注意点があります。十分な非int型文字列がある場合、例外発生は非常に高価であるため、パフォーマンスの問題が発生する可能性があります。かつてはある種の状況下でUI全体を減速させる同様のパターンを使用しました。 – Zebi

1
public static bool IsInt(string s) { 
    bool isInt = true; 
    for (int i = 0; i < s.Length; i++) { 
     if (!char.IsDigit(s[i])) { 
      isInt = false; 
      break; 
     } 
    } 
    return isInt; 
} 

例:

string int32s = "10240"; 
bool isInt = IsInt(int32s); // resolves true 

または:

string int32s = "1024a"; 
bool isInt = IsInt(int32s); // resolves false 
3
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); 
    } 

デモ:http://ideone.com/PravA

2

が同じ持っていました問題。これを試してみてください:

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

標識を考慮していません。むしろIsDigitを使用してください。 MSDNによると、「数字を含めることに加えて、数字には文字、小数点、下付き文字、上付き文字、ローマ数字、通貨分子、および丸数字が含まれます。 –