0

ページをロードすると、同じキー エラーを持つ項目が表示されます。これを解決する解決策はありますか? エラーの

一般情報は次のとおりです

 - - - - - - - - - - - - - - - - - - - - - - - 

 MachineName: WIN-SKEC08HPAEB  FullName: InnoArk.APDMS.Common,
 Version=1.0.0.0, Culture=neutral, PublicKeyToken=null  AppDomainName:
 /LM/W3SVC/2/ROOT-1-130120289473554687  ThreadIdentity: innoark 

 1) Exception Information 
 - - - - - - - - - - - - - - - - - - - - - - -  Exception Type: System.ArgumentException  Message: An item with the same key has
 already been added.  ParamName: NULL  Data:
 System.Collections.ListDictionaryInternal  TargetSite: Void
 ThrowArgumentException(System.ExceptionResource)  HelpLink: NULL 
 Source: mscorlib 

 StackTrace Information 
 - - - - - - - - - - - - - - - - - - - - - - -  at System.ThrowHelper.ThrowArgumentException(ExceptionResource resource) 
 at System.Collections.Generic.Dictionary`2.Insert(TKey key, TValue
 value, Boolean add)  at
 System.Collections.Generic.Dictionary`2.Add(TKey key, TValue value) 
 at InnoArk.APDMS.WebApp.Controllers.SimulationController._List(Guid
 GroupId, Guid bcTempId, String[] id, String[] volumeAnn, String[]
 volumeAvg, String[] costAvg, String[] costAnn, String[] costIfAvg,
 String[] costIfAnn, Boolean isEditBC, Boolean isBC, Boolean
 isSimulate, Boolean isSave) in
 D:\dev\APDMS\Trunk\InnoArk.APDMS.WebApp\Controllers\SimulationController.cs:line
 2478

申し訳ありませんが、2478 行目の SimulationController のコードは次のとおりです。

detailList = new Dictionary<string, object>();
                    detailList.Add("id", entityId[j]);
                    detailList.Add("volAnn", volAnn[j]);
                    detailList.Add("volAvg", volAvg[j]);
                    detailList.Add("volLatestAnn", volLatestAnn[j]);
                    detailList.Add("volLatestAvg", volLatestAvg[j]);
                    detailList.Add("cAnn", cAnn[j]);
                    detailList.Add("cAvg", cAvg[j]);
                    detailList.Add("cIfAnn", cIfAnn[j]);
                    detailList.Add("cIfAvg", cIfAvg[j]);
                    detailList.Add("code", code[j]);
                    detailList.Add("isLatest", isLatest[j]);
                    detailList.Add("isDirty", isDirty[j]);
                    detailList.Add("curr", curr[j] == null ? "" : curr[j]);
                    detailList.Add("noOfOrder", noOfOrder[j]);
                    detailList.Add("isFilter", isFilter[j]);
                    tempList2.Add(entityId[j].ToString(), detailList); << line : 2478

私の質問に答えてくれてありがとう? :)

4

2 に答える 2

3

これは、 という名前のディクショナリtempList2が、 の値を持つキーをすでに持っていることを意味しますentityId[j]

ループに問題があるか、entityId重複した値が含まれているようです。

それが2番目のオプションであると仮定すると、次を使用します.Distinct()

entityId = entityId.Distinct().ToList();

プレーンな配列でジェネリック リストでない場合entityIdは、代わりに次のようなコードを使用します。

entityId = entityId.ToList().Distinct().ToArray();

とにかく、これらのケースでのクラッシュを避けるために、そのような検証を追加できます:

if (tempList2.ContainsKey(entityId[j].ToString()))
{
    //already exists, you can show some alert here.
}
else
{
    tempList2.Add(entityId[j].ToString(), detailList);
}
于 2013-05-06T07:49:17.447 に答える
2

一般的な辞書に何かを追加しているように見えますが、そこに重複キーを含めることはできません。

追加する前に、既に存在するかどうかを確認してください。

于 2013-05-03T05:44:29.553 に答える