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