-1
 class Writer
{
   public void Write( int i )
    {
    }
   public  void Write(IList l) 
    {
        foreach ( var i in l )
        {
            Console.WriteLine(i.GetType());
            //Write( i );//CS1502
        }
    }

}
class Program
{
    static void Main(string[] args)
    {
        int[] array1 = { 1, 2, 3 };
        Writer t = new Writer();
        t.Write( array1 );
    }
}

var のタイプを表示すると、'System.Int32' と 'System.String' が表示されます。誰でも私を助けることができます。

4

5 に答える 5

5

void Write(IList l)に変更したいと思いますvoid Write(IList<int> l)

編集

次のようにジェネリックを追加することもできます。

void Write<T>(IList<T> l)void Write<T>(T i)

于 2012-10-15T14:39:30.203 に答える
2

の署名void Write(IList l)void Write(IList<int> l)代わりに変更します。

コンパイルされない理由IListは、ジェネリックではないため、リスト内のアイテムのタイプは.を受け入れるobjectオーバーロードがないためです。Writeobject

Writeあなたの署名を変更することで、リスト内の項目が実際intには であることをコンパイラに伝えているため、正しいオーバーロードに解決されます。

void Write(int i)または、代わりに署名を持つようにメソッドを変更してくださいvoid Write(object o)

于 2012-10-15T14:39:36.880 に答える
0

var動的ではなく、基になる型はコンパイル時に定義されます。

キーワードを読むdynamicか、IEnumerable<int>.

于 2012-10-15T14:40:51.107 に答える
0

foreach(object i in l) を使用しないのはなぜですか? このチェイスでは var には何のメリットもありません。"Daniel A. White" のようなジェネリックを使用すると、すべてのリストが 1 つの型を持つ場合に述べられます。

複数のタイプのリストを使用したい場合は、メソッドを保持しますが、var を object に置き換え、現在のオブジェクトのタイプを取得し、必要に応じて文字列を記述します。

于 2012-10-15T15:13:17.040 に答える
0

GetType は、変数のオブジェクトの型を出力します。値が欲しいだけだと思いますか?

Console.WriteLine(i);
于 2012-10-15T14:40:37.057 に答える