【发布时间】:2017-05-02 11:51:23
【问题描述】:
我对@987654321@ 的方法有一些疑问。我有一个类(描述如下),用作列表的类型。
我的课是:
public class MyClass
{
public string ID { get; set; }
public myEnum CallType { get; set; }
public object ObjToStore { get; set; }
}
我的List<T> 是这样实例化的:
private static List<MyClass> ListOfStoreObjects = new List<MyClass>();
我的麻烦是我将这些东西存储到这些列表中,我无法删除它们。我使用这些列表将临时数据存储在 Web 服务中(我想“走这条路”,所以请不要告诉我其他解决方案,谢谢)当然,一旦使用这些数据,我必须设法删除他们来自这个“缓冲区”。那么,有没有办法从静态列表中移除一个元素呢?
编辑
我使用的add函数是:
public bool AddToQueue(string id, myEnum callType, object objToAdd)
{
try
{
MyClass elementToAdd = new MyClass();
elementToAdd.ID = id;
elementToAdd.CallType = callType;
elementToAdd.ObjToStore = objToAdd;
ListOfStoreObjects.Add(elementToAdd);
return true;
}
catch
{
return false;
}
}
我用来检索我需要的对象然后从列表中删除它的函数:
public object RetrieveObj(string id, myEnum callType)
{
object obj = null;
foreach(var element in ListOfStoreObjects)
{
if( element.ID == id && element.CallType == callType)
{
obj = element.ObjToStore;
break;
}
}
MyClass itemToRemove = new MyClass();
itemToRemove.ID = id;
itemToRemove.CallType = callType;
itemToRemove.ObjToStore = obj;
ListOfStoreObjects.Remove(itemToRemove);
return obj;
}
【问题讨论】:
-
为什么
Remove有问题?什么没有按预期工作? -
有什么问题,线程相关还是其他什么?
-
@MightyBadaboom 问题是,实际上当我在列表中调用 List
.Remove(T) 时,它不起作用,它不会删除任何东西。 -
@ΦXocę 웃 Пepeúpa ツ 你什么意思?我无法理解你的问题...
-
实际上,您正在删除列表中不存在的新项目,因此您需要在此处添加 hack,请参阅@Karolis 对此的回答。尝试
itemToRemove == sameIdItemfromList或itemToRemove.Equal(sameIdItemfromList)以进一步了解IEqualityComparer