C# でのジェネリック型の変換
次のような質問が開発者の間で頻繁に起こります。「エラー: 型 'T' の値はに変換できません」 '弦'。"この問題は、ジェネリック型 'T' を特定の具象型にキャストしようとしたときに発生します。
次の方法を考えてみましょう:
T HowToCast<T>(T t) { if (typeof(T) == typeof(string)) { T newT1 = "some text"; T newT2 = (string)t; } return t; }
C バックグラウンドから来ているにもかかわらず、このコードは失敗します。コンパイル。コンパイラは、「型 'T' を文字列に暗黙的に変換できません」や「型 'T' を文字列に変換できません」などのエラーをスローします。
問題の理解
ここでの重要な問題は、コンパイラが「T」の特定の型を判断できないことです。 'T' が文字列であるかどうかをチェックする if ブロック内にあるとしても、コンパイラはコンパイル時にこの情報を持ちません。
解決策
解決するにはこの問題では、「オブジェクト」への中間キャストを実行する必要があります。任意のジェネリック型は「object」にキャストできるため、「object」から目的の具象型 (この場合は string) にキャストできます。
修正されたコードは次のとおりです:
T newT1 = (T)(object)"some text"; string newT2 = (string)(object)t;
「object」への中間キャストを実行することで、変換を明示的に指定し、コンパイラーが操作を正しく実行できるようにします。
以上がC# でジェネリック型 'T' を文字列に安全にキャストする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。