1

私は持っていIListます。私は電話をかけようとしToListますAddRange

ただし、ToList()すべての結果を上書きします。どうして?

private void AddAliasesThatContainsCtid(string ctid, IList<MamConfiguration_V1> results)
{

...
    foreach (var alias in aliases)
    {
        var aliasId = "@" + alias;

    results.ToList().AddRange(mMaMDBEntities.MamConfigurationToCTIDs_V1.Where(item => item.CTID == aliasId)
                             .Select(item => item.MamConfiguration_V1)
                             .ToList());
    }

}
4

4 に答える 4

5

.ToList()IEnumerable<T>を に変換せずList<T>、列挙可能な値で満たされた新しいリストを作成して返します。

したがってresult.ToList()、新しいリストを作成し、データを入力します。ただし、結果パラメーターによって参照されるオブジェクトの内容は変更されません。

resultパラメータの内容を実際に変更するには、その.Addメソッドを使用するか、設計で許可されている場合は のタイプを に変更する必要がありresultますList<..>

于 2013-05-05T08:51:10.650 に答える
2

あなたのコードは同等です:

// Create new List by calling ToList()
var anotherList = results.ToList();
anotherList.AddRange(...);

したがって、リストでanotherListはなく、実際に項目を に追加します。result

正しい結果を得るには、次の 2 つの方法があります。

1:

as として宣言resultsout、代入します。

results = anotherList;

または:

results = results.ToList().AddRange(...)

2:

の代わりに でAddサポートされているメソッドを使用するIListAddRange

于 2013-05-05T08:57:09.540 に答える