私はメソッドを持っていますが、Tパラメータはありません。c#typeof generic parameterに適用されました。スーパータイプ
残念ながら、C#typeof演算子は以下のようにジェネリックスで動作しません。
public static string ToString(object obj)
{
if (obj.GetType() == typeof(List<object>))
{
return "Bug: Never called";
}
if (obj.GetType() == typeof(List<int>))
{
return "Method only works for int lists";
}
return "";
}
予想される出力:ToString(intのリスト)は "Bug:Never Called"を返します。
実際の出力:「メソッドが唯一のintリストのために働く」
これは、Javaで完全にうまく働きました。 C#のジェネリックスはこれをサポートしていないと言います。 「ToString(オブジェクト)」メソッドをオブジェクトのリストに対して機能させるためにコードを再構築するにはどうすればよいですか?
要件:メソッドのシグネチャを変更することはできず、その実装のみを変更できます。
残念ながら、「int」クラスはインターフェイスを実装できません。 intクラスはMicrosoftによって書かれています。したがって、int型の訪問者パターンを追加することはできません。
'List
'List'オブジェクトのタイプが 'List
オブジェクトはintのスーパークラスなので、私はオブジェクトも "キャプチャ" intと思った。 – user2186597