35

そのように変換しようとすると、値を持つint変数があります。820924

(uint)data[structure["MICROSECONDS"].Index]

うまくいきません。

これもうまくいかない

unchecked((uint)data[structure["MICROSECONDS"].Index])

例外を受け取りSpecified cast is not valid.ます。

データ ストアobjectですが、実行時に に変換する必要がありintます。私はほぼ確信しています。オブジェクト値を出力しましたが820924、オブジェクト型を出力する方法がわかりませんが、int でなければなりません。

コード:

object value = data[structure["MICROSECONDS"].Index];
Console.WriteLine("xx MICROSECONDS type " + value.GetType());
Console.WriteLine("xx casting " + value);
Console.WriteLine("xx cast ok" + (uint)value);

結果:

xx MICROSECONDS type System.Int32
xx casting 820924
4

4 に答える 4

53

まず、値の型を確認する必要があります。メソッドを呼び出すことでそれを行うことができobj.GetType()ます (コードで直接またはイミディエイト ウィンドウで)。

そうであれば、次のintことができます。

uint u = (uint) (int) obj;

にキャストしようとしたときに にキャストしてからint変換するため、キャストとは異なることに注意してください。にキャストできないため、. にのみ変換できます。変換演算子とキャスト演算子の両方がコード内で同じように見えるのは紛らわしいです: .uintuintintuintInvalidCastExceptionintuintu = (uint) x

あなたができるより簡単なことは、Convertクラスから特定のメソッドを呼び出すことです:

uint u = Convert.ToUInt32(x);
于 2012-11-08T14:19:14.727 に答える
9

問題は、intとして保存されることobjectです。Intオブジェクトから派生しますが、からuint派生しないため、のように保存されたintキャストをキャストすることはできません。そのキャストが有効であるため、最初にキャストし、次ににキャストする必要があります。自分で試してみてください:intobjectuintintuint

object o = 5;//this is constant that represents int, constant for uint would be 5u
uint i = (uint)o;//throws exception

しかし、これは機能します:

object o = 5;
int i = (int)o;
uint j = (uint)i;

また

object o = 5;
uint i = (uint)(int)o; //No matter how this looks awkward 
于 2012-11-08T14:20:59.743 に答える
1

Indexプロパティが文字列か何かを返している可能性があります。次のことができます。

var num = Convert.ToUInt32(data[structure["MICROSECONDS"].Index]);

Convert.ToUInt32uintから変換できるすべての関連する型でオーバーロードされます。

于 2012-11-08T14:14:35.977 に答える
1

Index が文字列であるか、文字列に変換されたときに数値のような表現を持つ場合は、次を試すことができます。

UInt32 microSecondsIndex;
if(Uint32.TryParse(data[structure["MICROSECONDS"].Index.ToString()],out microSecondsIndex))
{
   //Do Stuff
}
else
{
    //Do error handling
}
于 2012-11-08T14:19:00.063 に答える