你好,我怎么能从通用列表中删除项目,这是我的代码,我试图这样做的权利,但我不知道我犯了错误;/
Users us_end = new Users();
foreach (var VARIABLE in ((List<Users>)Application["Users_On"]))
{
if(VARIABLE.Id == (int)Session["Current_Id"])
{
us_end.Name = VARIABLE.Name;
us_end.Id = VARIABLE.Id;
us_end.Data = VARIABLE.Data;
}
}
List<Users> us = ((List<Users>)Application["Users_On"]);
us.Remove(us_end);
Application["Users_On"] = us;
字符串
6条答案
按热度按时间6mzjoqzu1#
你必须得到相同的对象删除,而不是一个副本。
字符串
编辑:
只是为了在这里澄清一个地址,正如pst指出的那样,你也可以实现
IEquatable
接口和一些覆盖,比如Groo的答案,以使其工作,但我认为这是在这个特定的主题上矫枉过正。把这作为最常见的实践,但要明确的是,它也可以从列表中删除项目,即使它们是不同的示例,甚至是不同的对象。参考号:http://msdn.microsoft.com/en-us/library/ms131187.aspx
wnvonmuf2#
默认情况下,在.NET中通过引用比较对象相等性(除非
Equals
被重写,否则每个对象都继承自object.Equals
)。如果您希望Remove
方法找到您的对象,则不能传递新对象。最简单的方法是找到具有所需属性的实际对象,然后删除它:
字符串
ebdffaop3#
您正在创建一个 new
Users
对象-这与Application["Users_On"]
中已有的任何对象都不相同(它将具有不同的引用),因此它不会被删除。这假设
Users
中没有覆盖/实现Equals
和/或IEquatable<T>
。字符串
顺便说一下-你的变量命名不是很好-去更多的描述性名称。
carvr3hs4#
关于:
字符串
q5lcpyga5#
通过在remove语句中找到项目来删除它,而不是通过额外的副本:
字符串
uyto3xhc6#
正如有人在前面的回答中所说:在. NET中,对象相等性是通过引用进行比较的。但是你可以从类和结构之间的差异中受益,只需将List中的元素T从类转换为结构。