- PR -

型変換できるかどうかの確認

投稿者投稿内容
Jubei
ぬし
会議室デビュー日: 2002/03/02
投稿数: 830
お住まい・勤務地: 関西
投稿日時: 2005-04-07 22:53
引用:

NAL-6295さんの書き込み (2005-04-07 22:03) より:
C#だったらAs演算子が使えるかと・・・



えっ。。
as 演算子は参照型に使うものでは。。
int i = string as int は無理なのではないでしょうか。

#私の勘違いかな。

--追加--
今回の問題のように、stringに保持している値が数値に変換可能かどうかを判定したいということなら、きくちゃんさんの方法やtry〜catchで書くのが個人的には好きです。

_________________
諸農和岳
Powered by Borland Delphi/C++Builder & Microsoft VS.NET

[ メッセージ編集済み 編集者: Jubei 編集日時 2005-04-07 22:58 ]
NAL-6295
ぬし
会議室デビュー日: 2003/01/26
投稿数: 966
お住まい・勤務地: 東京
投稿日時: 2005-04-07 23:05
引用:

えっ。。
as 演算子は参照型に使うものでは。。
int i = string as int は無理なのではないでしょうか。



そうでした・・・。
うっかりしてました。
はぎ丸
常連さん
会議室デビュー日: 2005/02/02
投稿数: 36
投稿日時: 2005-04-08 11:23
こんにちは。
試す時間がないので推測ですが、
MSDNの例で下記のような記述がありました。
----------------------------------------
MyVar = "53" ' Assign value.
MyCheck = IsNumeric(MyVar) ' Returns True.
' ...
MyVar = "459.95" ' Assign value.
MyCheck = IsNumeric(MyVar) ' Returns True.
----------------------------------------
上の場合(53)にはいいんですが、
下の場合(459.95)の場合のものをIntegerに変換すると切り捨てられませんか??
(または落ちますかね??)
小数点が絶対に入ってこなければIsNumericでもいいと思いますが。。。
ちょっと危険かもしれないですね〜
それだったらtry,catchのほうがいいかもです。
ジョン吉
常連さん
会議室デビュー日: 2005/02/25
投稿数: 33
投稿日時: 2005-04-08 11:37
正規表現でもチェックできますよね。
ここにも簡単なサンプル載ってます。
http://www.microsoft.com/japan/msdn/security/guidance/secmod83.mspx
きくちゃん
ぬし
会議室デビュー日: 2003/08/01
投稿数: 854
お住まい・勤務地: 都内某所
投稿日時: 2005-04-08 12:08
引用:

きくちゃんの書き込み (2005-04-07 20:06) より:
System.ComponentModel.TypeConverter 派生クラス(例えば System.ComponentModel.Int32Converter クラス)の IsValid メソッドとかはどうでしょう。


駄目。
試してみたら、なんか常に True を返すような気が…。
Jubei
ぬし
会議室デビュー日: 2002/03/02
投稿数: 830
お住まい・勤務地: 関西
投稿日時: 2005-04-08 13:29
諸農です。

引用:

駄目。
試してみたら、なんか常に True を返すような気が…。



確認してみました。
このIsValidの挙動は私にとっては想定外です。

コード:
string s = "ABC";
int i  = (int)TypeDescriptor.GetConverter(typeof(int)).ConvertFromString(s);
Console.WriteLine(i.ToString());



こっちのコードであればちゃんと例外が出るのに。。。


_________________
諸農和岳
Powered by Turbo Delphi & Microsoft Visual Studio 2005

十兵衛@わんくま同盟
http://blogs.wankuma.com/jubei/
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2005-04-08 21:57
引用:

IsNumeric("100")
はtrueですが、
TypeOf "100" is Integer
はFalseでした。


 "100"はStringで、Integerではありませんから。っつうか、ちゃんと説明文にリンクさせているんだから読もうよ。。。
引用:

オブジェクトがインターフェイスなどの特定の型から派生しているかどうか、または特定の型を実装しているかどうかを検査する


TypeOfで検査できるのは、継承か実装の関係があるときだけです。

 で、まゆりんさんの“正解”の後にわざと出したのは、タイトルが「型変換できるかどうかの確認」だからです。内容に「stringをIntegerに変換したい」とあるので、タイトルと内容が一致していません。

 で、今回の場合、文字列から数値は「型変換」ではありません。「文字列の解析」です。なので、「型変換」で検索しても出てきません。
 IsNumericは「数値 ( 分析 OR 認識 OR 解析 OR 変換 ) できるか」で出てきました。
# MSDN Onlineも同じ式で検索できたと思うけど、出来ない??
_________________
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2005-04-08 22:00
引用:

きくちゃんさんの書き込み (2005-04-08 12:08) より:
駄目。
試してみたら、なんか常に True を返すような気が…。


 内部でオーバーロードしている、もうひとつのメソッドをコールしていれば、常にTrueになりそう。。。

スキルアップ/キャリアアップ(JOB@IT)