C# 如何将当前属性指定为等于新参数,然后在指定新值时将其删除?

C# 如何将当前属性指定为等于新参数,然后在指定新值时将其删除?,c#,class,inheritance,properties,enumerable,C#,Class,Inheritance,Properties,Enumerable,测试应检查列车何时被分配到失去前一条线路的线路。班列应通过以下步骤(需要遵守这些步骤)在功能公共无效分配(ILine l)中实施该测试: 当前分配=l1 l1.列车包含此 需要从l1.trains 需要更改当前线路并将列车添加到新线 内部类列车:ITrain { 内部列车(字符串名称,公司) { this.Name=Name; 这个公司=公司; } 公共字符串名 { 得到; } 上市公司 { 得到; } 公共线分配 { 得到; 私人设置; } 公共无效转让(ILine l) { //当前分配=

测试应检查列车何时被分配到失去前一条线路的线路。班列应通过以下步骤(需要遵守这些步骤)在功能公共无效分配(ILine l)中实施该测试:

  • 当前分配
    =l1
  • l1.列车
    包含此
  • 需要从
    l1.trains
  • 需要更改当前线路并将列车添加到新线
  • 内部类列车:ITrain
    {
    内部列车(字符串名称,公司)
    {
    this.Name=Name;
    这个公司=公司;
    }
    公共字符串名
    {
    得到;
    }
    上市公司
    {
    得到;
    }
    公共线分配
    {
    得到;
    私人设置;
    }
    公共无效转让(ILine l)
    {
    //当前分配=l1
    var l1=赋值;
    //l1,火车上有这个
    本次列车分配(l1列车)
    //需要将其从l1.1中删除
    ((列表)l1.列车)。移除(本);
    //需要更改当前线路并将列车添加到新线
    ((列表)l.列车)。添加(本);
    赋值=l;
    }
    }
    
    }
    当前接口的问题是
    ILine.Trains
    是一个
    IEnumerable
    ,您无法从
    IEnumerable
    中删除某些内容。在您的代码中,您假设它始终是一个
    列表
    ,您不应该这样做,但是如果您不能更改
    ILine.Trains
    的类型,那么我想这是唯一的方法

    无论如何,代码不起作用的原因是,出于某种原因,您正在递归调用
    AssignTo
    。您应该删除此呼叫:

    public void AssignTo(ILine l)
    {
        var l1 = Assignment;
    
        // remove this line
        // this.AssignTo(l1.train)
    
        ((List<Train>)l1.Trains).Remove(this);
    
        ((List<Train>)l.Trains).Add(this);
        Assignment = l;
    
    }
    

    您能在这里显示
    ILine
    ?公共接口ILine{string Name{get;}城市{get;}IEnumerable Trains{get;}}此部分((列表)l1.Trains)。删除(此);需要有一个l1.Trains包含此项的前一步,然后才能删除。@barbra哦,你的意思是在删除此项之前,需要检查l1.Trains是否包含此项。@barbra请查看编辑。实际上,您并不需要这样做,因为当列表中没有此时,
    Remove
    无论如何都不会做任何事情。因为需要遵守以前的测试,所以它还有很多。对象引用未设置为由“if(l1.Trains.Contains(this)){”行引起的对象实例。它确实通过了此行“t1.AssignTo(l1);”@barbra该错误似乎与我的代码无关,请参阅
    var l1 = Assignment;
    
    if (l1.Trains.Contains(this)) {
        ((List<Train>)l1.Trains).Remove(this);
    }
    
    ((List<Train>)l.Trains).Add(this);
    Assignment = l;