2009-10-02 12 views
5

C#言語チームがStringオブジェクトにIsNumeric関数を提供していない理由を知りたいだけですか? IsNumeric関数は、Int32.TryParse関数であるStringオブジェクトの方が適切でした。CでString.IsNumeric関数が存在しない理由

注:私はこのことを初心者に説明することが難しいと感じたので、私はこの質問をしています。

更新:この問題は、IsNumeric関数の実装方法に関するものではありません。

+4

拡張メソッドとして追加できます。 :) –

+0

私は拡張メソッドを認識していますが、ここでは問題ではありませんが、とにかく感謝します( - : – pradeeptp

答えて

17

このような方法の問題は、何が「数値」として数えられるかを決めることです。小数点以下の桁数の上限がなければ、小数点以下を許すべきですか?

Int32.TryParseは、「これはInt32の有効な文字列表現ですか?」というより明確な質問に答えます。

もちろん、独自の拡張メソッドを書くのを止めることはありません。文字列があなた自身のルールに従って数字であるかどうかを判断するものは何もありません。

+0

これは、MSがこれらのメソッドをCharデータ型に置くのを止めませんでした。 –

+5

これは、個々の文字が数字であるかどうかにかかわらず、そのような方法が意味をなさないためです。 – RobV

4

大量の機能があり、有用で絶対的に必要なものがあることがあるためです。

IsNumeric() 
IsAlpha() 
IsAlphaNumeric() 
IsEmailAddress() 
IsGuid() 
... 

など。どんな個人でも、必要と思われる数多くの方法を簡単に追加することができます。フレームワークは汎用性を保ち、作業を行うための基本的なツールを提供し、必要に応じて余分なツールを構築することを目的としています。

これは、拡張メソッドを追加するだけです。

+0

私はIsNumeric関数が他の言語で使用して成長したものだと感じます。あなたが他のオブジェクトの代替機能について深く知っている専門家に欲しいのでなければ、これは絶対に必要だと感じています! – pradeeptp

3

クラスに入れたメソッドと他のクラスによってうまく実行される操作の間には、どこかに線がなければなりません。

IsNumericメソッドがあった場合、他の人がIsValidPhoneNumber、IsValidEmailAddress、IsValidURI、またはIsValidZipCodeInNewZealandメソッドを要求する可能性があります。これらのメソッドはすべて、独自のドメインで実装する方がよいでしょう。

+0

@Timboインターネット上のIsNumeric関数に関する質問の数を調べると、なぜこの質問をしたのか理解できます。これは、ほとんどの開発者がStringオブジェクトで見たい共通機能の1つです。 VB6のような他の言語/ツールから来ている人には、これがStringオブジェクトで利用可能であると期待されます! – pradeeptp

1

IIRC There ist Char.IsDigit(char c);

string _temp = "12341234"; 
bool _isNumeric = _temp.ToCharArray().All(x => Char.IsDigit(x)); 

そして、あなたが好きなら、あなたは、拡張メソッドとしてそれをラップできます。

したがって、私はそれが動作するはずだと思います。サイドノートで

+0

残念ながら、現在のユーザーのローカライゼーション設定に応じて、負の数値またはより洗練された数値形式では機能しません。 – Timbo

+0

先頭または末尾のスペースを持たない自然数だけを許可すると、式が意味をなさなくなります。つまり、あなたが定義するものは「数値」に依存します。 –

0

:あなたは常に自分自身を実装することができます

public static class StringExtensions 
{ 
    public static Boolean IsNumeric(this String s) 
    { 
     // your own definition goes here 
    } 
} 
3

私はInt32.TryParseの背後にあるロジックはInt32クラスがStringクラスはノーであるのに対し、有効な32ビットの整数であるかを知っているということだと思います数字であることの概念。

その背後にある原則は、何かがその特定のオブジェクトとして扱われるかどうかを自分自身で調べることができるということです。

関連する問題