我有两个基于同一个班级的列表。 我想要一个列表来继承其他列表的类属性的值。
class feature {
Guid id;
string featureName;
string featureType;
.....
}
List <feature> companyFeatures;
List <feature> divisionFeatures;
功能列表在公司级别设置
创建分部时,它应该继承公司功能列表中的所有功能。 (不复制)
如果分部在特定要素中具有与公司不同的属性值,则用户希望在分部的要素列表中“保存”此属性的值。
这使用户能够在以后的公司级别添加功能,并在部门级别查看这些新功能。
通常,部门列表中的项目不会很多,因为它们与公司列表相同。
我尝试使用linq(外部联接)加入两个列表。 当分区级别的列表元素没有条目时,它似乎失败了。
我想我做错了什么(我可能无法正确理解外连接) 任何帮助将不胜感激。
顺便提一下,是否有推荐用于实现继承的设计模式。
快乐,度过美好的一天
=============================================== =================================
添加一个例子(希望这会澄清我的目标)
List <feature> companyFeatures = new List <feature>
{
new <feature> { Guid1 , "Color" , "Text" , .... },
new <feature> { Guid2 , "address" , "Link" , .... },
new <feature> { Guid3 , "logo" , "Picture" , .... }
}
List <feature> divisionFeatures = new List <feature>
{
new <feature> { Guid2 , "address" , "text" , .... },
}
我在“继承”之后寻找的功能列表应该是:
{
{Guid1, "Color" , "Text" , ...},
{Guid2, "address" , "text" , ...},
{Guid3, "logo" , "Picture" , ...}
}
请注意,Guid2现在具有type属性的text值。 希望这澄清。
答案 0 :(得分:1)
从技术上讲,这不是继承 -
如果此处的目标是返回companyFeatures
和divisionFeatures
列表中所有功能的集合,那么您可以这样做:
IEnumerable<feature> totalFeatures = companyFeatures.Concat(divisionFeatures);
Enumerable.Concat方法将返回IEnumerable<T>
,其中包含两个列表中的元素。
答案 1 :(得分:0)
如果我误解了,请纠正我。您有一个Company
班级和一个Division
班级,他们都有一个List<Feature>
字段?有点像...
public class Company {
// ...
public List<Feature> CompanyFeatures;
// ...
}
public class Division {
public Company Company; // The company to which the division belongs
// ...
public List<Feature> DivisionFeatures;
// ...
}
如果是这种情况,那么我建议将功能列表转换为只读属性,让它自动处理“继承”。为了exacmle ......
public class Division {
public Company Company; // The company to which the division belongs
// ...
private List<Feature> _divisionFeatures; // private now
public IEnumerable<Feature> DivisionFeatures {
get {
// Take all the features for the divison...
return _divisionFeatures.Concat(
// ... and add all the company features except for those that
// have the same name as one of the division features.
Company.CompanyFeatures.Where(cf => !_divisionFeatures
.Any(df => df.Name == cf.Name))
);
}
}
// ...
}
或者,当然您仍然可以公开List<Feature>
(以便您仍然可以从外部操纵它)并将属性称为DivisionFeaturesWithInheritance
。