Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 具有两个泛型类型的泛型类_C#_.net_Generics - Fatal编程技术网

C# 具有两个泛型类型的泛型类

C# 具有两个泛型类型的泛型类,c#,.net,generics,C#,.net,Generics,我有一个“可选项”的通用类,它对列表很有用。现在,我希望一个可选项包含其他可选项的列表。这是我的密码: public interface ISelectableItem<T> { bool IsSelected { get; set; } bool IsVisible { get; set; } string DisplayName { get; set; } T Value { get; set; } ObservableCollection

我有一个“可选项”的通用类,它对列表很有用。现在,我希望一个可选项包含其他可选项的列表。这是我的密码:

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; }
}
公共接口ISelectableItem
{
布尔被选为{get;set;}
bool是可见的{get;set;}
字符串DisplayName{get;set;}
T值{get;set;}
ObservableCollection子项{get;}
}
目前,
子项
集合的类型与SelectableItem本身的类型相同


问题是:我必须如何声明此接口,以便
子项
也是
可选择项
,但类型为
T2
,而不是
T

向类型定义添加第二个泛型类型
T2

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

如果添加第二个泛型类型T2,“ObservableCollection”还需要两个泛型类型。所以这不起作用了。@okieh:好的。那么这个呢?
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());