0
我試圖組建一個架構是這樣的:參數 'SpecificGroupType1' 是不能分配給參數類型'<IItem>集團
- 科
- 集團
- 項目
- 屬性
- 屬性
- 項目
- 集團
- 項目
- 屬性
- 屬性
- 項目
- 集團
科
[...]
我再試圖實例化這個架構是這樣的:
var sections = new List<ISection>
{
new Section("Section Header", new List<Group<IItem>>
{
new SpecificGroupType1(token, "GroupName")
}
};
的SpecificGroupType1然後旋轉起來適當的iItem的新列表類型。
我收到以下錯誤,但:
Argument SpecificGroupType1 is not assignable to parameter type Group<IItem>
我不明白爲什麼,但是,因爲SpecificGroupType1從集團繼承。
完整的架構看起來像這樣(我省略了IAttribute的東西,因爲我跑步進入發行前IAttribute東西也不甘寂寞發生):
Section.cs
public interface ISection { // Stuff }
public class Section : ISection
{
public Section(string sectionName, IList<Group<IItem>> groups)
{
Name = sectionName;
Groups = groups;
}
}
Group.cs
public interface IGroup { // Stuff }
public abstract class Group<T> : IGroup where T : IItem
{
protected Group(JToken token, string groupName)
{
Name = groupName;
Items = new List<IItem>();
foreach (var itemToken in Token.Children())
{
Items.Add((Item)Activator.CreateInstance(typeof(T), itemToken);
}
}
public string Name { get; internal set; }
public JToken Token { get; internal set; }
protected IList<IItem> Items { get; set; }
}
SpecificGroupType1.cs
public class SpecificGroupType1 : Group<SpecificItemType1>
{
public SpecificGroupType1(JToken token, string groupName) : base(token, groupName) {}
// Stuff
}
Item.cs
public interface IItem { // Stuff }
public abstract class Item : IItem
{
protected ConfigurationItem(JToken token)
{
Attributes = new List<IAttribute>();
Token = token;
}
public IList<IAttribute> Attributes { get; set; }
public JToken Token { get; set; }
}
SpecificItemType1。cs
public class SpecificItemType1 : Item
{
public SpecificItemType1(JToken token) : base(token) {}
// Stuff
}
我在代碼中看到的一個問題是您有'IGroup',但是'IGroup'的聲明沒有通用參數。這將無法編譯,除非另有通用接口定義。 –
recursive
哎呀,那是一個錯字。這實際上是IList>在我的代碼中。 –
jrsowles
得到SpecificItemType1的定義?它是否繼承了Item? – Bill