有没有办法轻松替换多个列表中引用的对象?

时间:2016-09-06 04:24:03

标签: c# .net list reference

我想用一个匹配接口类的新实例替换多个列表中引用的对象。

以下是更好地了解问题的示例。

  1. 有一个名为IPosition
  2. 的界面
  3. 有两个实现该界面的类:RealPositionAccessiblePosition
  4. 在我的算法中,我收到一个IPosition列表数组,如下所示:List<IPosition>[],基本上是多个列表
  5. 列表引用对象的相同实例是很常见的。这是一个可视化:Multiple List items referencing the same object.
  6. 现在我想创建new类的AccessiblePosition实例,并更新所有列表中的所有引用。
  7. 有没有办法轻松做到这一点?

    非常感谢提前!

2 个答案:

答案 0 :(得分:2)

您可以为数据创建容器。

public interface IContainer<T>
{
    T Data { get; set; }
}

List<IContainer<IPosition>>

现在,您可以更改容器的Data,而不是更改项目引用。

答案 1 :(得分:0)

您可以遍历列表并比较项目。

public interface IPosition
{
    int ID { get; set; }
}

public class RealPosition : IPosition
{
    public int ID { get; set; }
}

public class AccessiblePosition : IPosition
{
    public int ID { get; set; }
}

void Main()
{
    var toReplace = new RealPosition { ID = 1 };        
    var list1 = new List<IPosition>
    {
        toReplace,
        new RealPosition { ID = 2 },
        new RealPosition { ID = 3 },
    };
    var list2 = new List<IPosition>
    {
        toReplace,
        new RealPosition { ID = 4 },
        new RealPosition { ID = 5 },
    };
    var listOfLists = new List<List<IPosition>>{ list1, list2 };
    var replacement = new AccessiblePosition{ ID = 42 };

    foreach(var list in listOfLists)
    {
        //must use for here
        for(int i = 0; i < list.Count; ++i)
        {
            if(list[i] == toReplace)
            {                       
                list[i] = replacement;
            }
        }
    }
}