2012-03-01 8 views
1

私はこのコードでデータセットのデータから長時間変換をしようとしています。Long.Tryparse Overload&Convert error C#

データセット内のその位置の値を変換できるかどうかを確認しようとしています。

long Recid = 0; 
Boolean checkrecid = long.TryParse(dts.Tables[0].Rows[0]["RECID"], out Recid) 

エラー:

The best overloaded method match for 'long.TryParse(string, out long)' has some invalid arguments and 
Argument 1: cannot convert from 'object' to 'string'  
それが動作しない場合、それは(txtfileからreaded)他のすべての参加者が

コード有効であるため、データセット内に項目が存在しないことを意味し

ありがとうございます。

+2

RECIDが長い場合は、キャストすることではなく、変換する必要はありません。(長い)dts.Tables [0] .Rows [0] [ "RECID"] –

答えて

8

つのオプション:

データ文字列、それは

long Recid = 0; 
Boolean checkrecid = long.TryParse(dts.Tables[0].Rows[0]["RECID"].ToString(), out Recid) 

理由に.ToString()を呼び出し、

long Recid = 0; 
Boolean checkrecid = long.TryParse((string)dts.Tables[0].Rows[0]["RECID"], out Recid) 

そうでない場合は、それを文字列としてキャストしている場合これを行う必要があるのは、long.TryParse()メソッドのみです。データセットから出てくるその最初のパラメータとしてstringのインスタンスをcepts http://msdn.microsoft.com/en-us/library/zc2x2b1h.aspx

データはobjectとして入力されると、それは文字列であり、それは失敗している場合のでInt64.TryParse()方法は確認することはできません。 (一般に、プログラミングではあいまいさが許されません。そのため、TryParseメソッドは変換を試みません。あなたが何を望み、何を提供しているのかを明示する必要があります。

データセットはobjectを格納することができるので非常に柔軟ですが、プログラマが再びタイプし直した後にそのタイプをキャストすることが多くなります。強く型付けされたデータセットのような他の選択肢は、その中に格納できるタイプを厳格にすることでその問題を回避しますが、常にキャストする必要はありません。

+0

ありがとう!しかし、少し説明できますか?なぜ私はオブジェクトを文字列に変換してからそれを長いものに戻すべきか分かりません。 – Dashzapp

+0

問題はありません。 –

+3

@Dashzapp既に変換していない文字列の場合、キャストは変換ではありません。これは、与えられたオブジェクトが与えられた型(この場合は文字列)であると期待できることをコンパイラに伝えるプログラマです。それはすでに長いので、それを長いキャストするので、コンパイラはそれが長い値であることを知っている –

0

オブジェクト(dts.Tables[0].Rows[0]["RECID"])を文字列に変換します。それでおしまい。

dts.Tables[0].Rows[0]["RECID"].ToString()