2

WriteListリストをファイルに保存する機能があります。この関数にはパラメーターがあるList<Object>ため、さまざまなタイプのリストをパラメーターとして渡すことができます。

    public void WriteList(List<object> input, string ListName)
    {
        WriteToFile("List - " + ListName);
        foreach (object temp in input)
        {
            WriteToFile(temp.ToString());
        }
    }

自分のコードからこの関数を呼び出すとき、自分で作成したクラスList<Database>であるパラメーターを渡したいと思います。Database次のエラーが表示されます。

「System.Collections.Generic.List -Database-」から「System.Collections.Generic.List-object-」に変換できません

だから私の質問は、自分のクラスをオブジェクトに変換してから、リストを関数に渡す方法です。

4

3 に答える 3

14

List<T>共変ではありません。IEnumerable<T>代わりに使用してください:

public void WriteList(IEnumerable<object> input, string ListName)
{
    WriteToFile("List - " + ListName);
    foreach (object temp in input)
    {
        WriteToFile(temp.ToString());
    }
}

または、メソッドをジェネリックにします。

public void WriteList<T>(List<T> input, string ListName)
{
    WriteToFile("List - " + ListName);
    foreach (T temp in input)
    {
        WriteToFile(temp.ToString());
    }
}

IMO: 値型で使用するとボックス化/ボックス化解除がないため、2 番目の方が優れています。

于 2013-07-03T11:30:28.900 に答える
2

あなたはlinqを使うことができます:

List<object> objectList = myList.Cast<object>().ToList();
this.WriteList(objectList, "Some Name")

linq をインポートすることを忘れないでください:

using System.Linq;
于 2013-07-03T11:31:42.733 に答える
1

List<Database>にキャストできませんList<object>List<Database>1 つの方法は、クラスを として宣言することです。注:データベースオブジェクトをクラスList<Object>に追加することもできます。

于 2013-07-03T11:31:35.440 に答える