2014-10-20 123 views
1

我有一个“可选项”的泛型类,它对列表很有用。现在我想要一个可选项目来包含其他可选项目的列表。这里是我的代码:具有两种泛型的泛型类

public interface ISelectableItem<T> 
{ 
    bool IsSelected { get; set; } 
    bool IsVisible { get; set; } 
    string DisplayName { get; set; } 
    T Value { get; set; } 
    ObservableCollection<ISelectableItem<T>> SubItems { get; } 
} 

对于现在的SubItems集合是相同的类型SelectableItem本身。

问题是:如何做我必须声明这个接口,以便SubItemsISelectableItem,但T2型的,而不是T

回答

3

添加第二个通用类型,T2,到该类型定义:

public interface ISelectableItem<T, T2> 
{ 
    T Value { get; set; } 
    ObservableCollection<ISelectableItem<T2>> SubItems { get; } 
} 

B计划将是子项和主项之间偏离通过添加第二界面层:

public interface ISelectableItem<T, T2> : ISelectableItem<T> 
{ 
    ObservableCollection<ISelectableItem<T2>> SubItems { get; } 
} 

public interface ISelectableItem<T> 
{ 
    bool IsSelected { get; set; } 
    bool IsVisible { get; set; } 
    string DisplayName { get; set; } 
    T Value { get; set; } 
} 

这将例如工作:

public class A : ISelectableItem<string> { ... } 

public class B : ISelectableItem<string, string> { ... } 

B b = new B(); 
b.SubItems.Add(new A()); 

甚至:

b.SubItems.Add(new B()); 
+2

如果添加第二个泛型类型T2,则“ObservableCollection >”也需要两个泛型类型。所以这不起作用。 – okieh 2014-10-20 10:16:14

+0

@okieh:好的。那么这个怎么样? – 2014-10-20 10:18:46