ジェネリックで動的にキャストしており、キャスト時に問題が発生しました。long
からint
です。問題は、基本的には次に沸く:オブジェクトインスタンスを使用して、longからintへジェネリックでキャストする
これは動作しますが:
long l = 10;
int i = (int) l;
これはしません:
long l = 10;
object o = l;
int i = (int)o;
だから、問題は、私はタイプobject
の変数としてオブジェクトを持っているということですが、後ろのインスタンスはlong
のタイプで、これをint
にキャストしたいと考えています。これまでに私が見つけたのは、この記事です:Representation and identity (Eric Lippert)。
だから何有効だろうことはこれです:
long l = 10;
object o = l;
int i = (int)(long)o;
私は何をしようとしたことはこれです:
long l = 10;
object o = l;
int i = (int) Convert.ChangeType(o, typeof(long));
しかし、これは動作しません。今質問は、System.InvalidCastException
を使わずに動的にキャストする方法です。
現在、私は持っているがこれです(そしてそれは動作しません):
public T Parse<T>(object value){
return (T) Convert.ChangeType(value, value.GetType());
}
は、どのように私はそれが動作し、Tはint
をbeeingてとタイプlong
のオブジェクトを渡すことができるようにすることができます。
私はそれを得ることはありません。あなたは、(オブジェクトを元のタイプにキャストして)動作する方法を見つけましたが、もっと複雑なやり方でそれをやりたいのですか?また、64ビット整数から32ビットへのデータ損失の可能性については心配していませんか? – user1666620
ちょうど 'return(T)value; 'と言うことができません。 –
@ChristophKnいいえ、InvalidCastExceptionがスローされます。 – Sjoerd222888