问题是,列表< T>是一个引用类型。如果你的代码:
Ids = s.Type.Equals(<Condition>) ? transModelIds : statModelIds;
你不要复制列表中,但使参考Ids
指向同一列表(一个或多个)。
要解决这个问题:
List<int> Ids = new List<int>();
var transModelIds = db.TableName.ToList();
var statModelIds = db.TableName1.ToList();
foreach (var user in metaData){
foreach(var s in someData){
Ids.Clear();
Ids.AddRange(s.Type.Equals(<Condition>) ? transModelIds : statModelIds);
/*... don't set the reference to the list but add the items from the source to your destination */
}
}
替代你也能建立在内环一个新的列表,如果你只在此范围内需要它(如Jon的评论媒体链接建议我们不能没有完整的工作帮助代码):
var transModelIds = db.TableName.ToList();
var statModelIds = db.TableName1.ToList();
foreach (var user in metaData){
foreach(var s in someData){
List<int> ids = new List<int>();
ids.AddRange(s.Type.Equals(<Condition>) ? transModelIds : statModelIds);
/*... don't set the reference to the list but add the items from the source to your destination */
}
}
然而,你可以问自己一个问题是:
我需要临时LIS t呢?
在这种情况下,只需像您一样设置列表的引用,但不要清除它。
编辑
外部范围:
var transModelIds = db.TableName.ToList();
var statModelIds = db.TableName1.ToList();
List<int> ids = null;
foreach (var user in metaData){
foreach(var s in someData){
ids = s.Type.Equals(<Condition>) ? transModelIds : statModelIds;
/*... additional code but don't modify the lists (clear or remove single items, etc...) ...*/
}
}
内部范围:
var transModelIds = db.TableName.ToList();
var statModelIds = db.TableName1.ToList();
foreach (var user in metaData){
foreach(var s in someData){
List<int> ids = s.Type.Equals(<Condition>) ? transModelIds : statModelIds;
/*... additional code but don't modify the lists (clear or remove single items, etc...) ...*/
}
}
请显示一个简短但完整的程序来展示问题。目前我们没有足够的信息来帮助你。 –
请注意,[标签:模型视图控制器]是针对有关*模式*的问题;如果您的问题涉及ASP.NET实现,请使用[tag:asp.net-mvc]标签。 –
@TiesonT。这并不是说这个问题与任何类型的MVC,模式都没有任何关系。标签删除完全合适。 = D –