1

TC#では、タイプを証明できるタイプにキャストできませんT。どうすればTそのタイプにキャストできますか?

public static T _cast<T> (object o) {
    if (typeof(T) == typeof(string)) {
        return (T) o.ToString(); // Compiler YELLS!
    }
    throw new InvalidCastException("missing compiler generated case");
}

私はC++からC#にコードを生成するプログラムを書いています。この_cast操作は、C++の代わりに使用したいと思いますoperator T ()

4

4 に答える 4

3

object通常、私は自分の質問に答えませんが、解決策を思いついただけです。T

public static T _cast<T> (object o) {
    if (typeof(T) == typeof(string)) {
        return (T)(object) o.ToString();
    }
    throw new InvalidCastException("missing compiler generated case");

}
于 2012-07-21T01:09:06.713 に答える
3

ダブルキャストよりもエレガントな解決策は、asキーワードを使用することだと思います。このような:

return o.ToString() as T;

私はそれを試しませんでしたが、文字列をTにキャストできない場合はnullを返すため、コンパイラは問題を抱えていないはずです。これは、条件内ではもちろん実行されません。

于 2012-07-21T02:37:02.333 に答える
0

文字列から他のすべてのタイプへの変換はありません。コンパイラは、あなたが要求したことを実行する方法がわからないと言っています。あなたがやろうとしていることについてもっと詳細を提供するなら、多分誰かがいくつかのアドバイスを提供することができます。

于 2012-07-21T01:04:42.953 に答える
0

キャストと構文解析には違いがあります。あなたが欲しいのは文字列を解析してみることだと思います

int stringToNum = (int)"123";  //will not compile

int stringToNum2 = int.Parse("123");
于 2012-07-21T01:34:45.217 に答える