ジェネリック型は特定の型にキャストできますか?
最近のクエリで、C のバックグラウンドを持つプログラマーが、ジェネリック型を C# の特定の型にキャストする方法について支援を求めました。提供されたコード:
T HowToCast<T>(T t) { if (typeof(T) == typeof(string)) { T newT1 = "some text"; T newT2 = (string)t; } return t; }
コンパイラが「T」から文字列に変換できないというエラーを出し、コンパイルに失敗しました。
この問題を理解するには、コード内にあるにもかかわらず、それを認識する必要があります。 if ステートメントを使用すると、コンパイラは 'T' が文字列型であると推論できません。その結果、キャストは失敗します。これに対処するには、最初に 'T' を 'object' にキャストする必要があります。これは、任意の 'T' を 'object' にキャストしてから、さらに 'object' から 'string' などの目的の特定の型にキャストすることができるためです。
修正されたコード:
T newT1 = (T)(object)"some text"; string newT2 = (string)(object)t;
は正しいアプローチを示しています。
以上がC# のジェネリック型を特定の型にキャストできますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。