.NET - 自定义类型可能吗?

J..*_*... 6 c# vb.net delphi types

在Delphi中,您可以执行以下操作:

TArray = array[1..3] of byte;
Run Code Online (Sandbox Code Playgroud)

然后你可以在哪里申报

T2Array = array[1..3] of TArray
Run Code Online (Sandbox Code Playgroud)

ad nauseum ...

.NET中是否存在类似的内容?(vb,c#,无论如何)

我目前正在做这样的事情

Private LotsOfData As ObservableCollection(Of ObservableCollection(Of myClass))
Run Code Online (Sandbox Code Playgroud)

但是想做

Private LotsOfData As ObservableCollection(Of myType)
Run Code Online (Sandbox Code Playgroud)

哪里

myType -->  ObservableCollection(Of myClass)
Run Code Online (Sandbox Code Playgroud)

我知道你可以用结构做到这一点,即:

Public Structure MyType
     Public myOc as ObservableCollection(Of MyClass)
End Structure

Dim LotsOfData as ObservableCollection(of MyType)
Run Code Online (Sandbox Code Playgroud)

但是你必须引用它(例如)

LotsOfData.Last.myOc(i) 
Run Code Online (Sandbox Code Playgroud)

代替

LotsOfData.Last(i)
Run Code Online (Sandbox Code Playgroud)

这看起来很笨拙.这看起来也很笨拙:

For Each Data as ObservableCollection(of myClass) in LotsOfData
     DoSomething(Data)
Next
Run Code Online (Sandbox Code Playgroud)

同样如此

For Each Data as MyType in LotsOfData
     DoSomething(Data.myOc)
Next
Run Code Online (Sandbox Code Playgroud)

什么时候可能

For Each Data as MyType in LotsOfData
     DoSomething(Data)
Next
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

Dou*_*las 5

如何定义从封闭类型的泛型集合派生的自定义类?例如:

public class MyType : ObservableCollection<MyClass>
{ }
Run Code Online (Sandbox Code Playgroud)

然后你可以创建另一个泛型集合,其类型参数是你定义的上层类(它本身就是一个集合):

ObservableCollection<MyType> lotsOfData = new ObservableCollection<MyType>();
Run Code Online (Sandbox Code Playgroud)

迭代它时,您将获得内部集合的序列:

foreach (ObservableCollection<MyClass> data in lotsOfData)
{
    DoSomething(data);
}
Run Code Online (Sandbox Code Playgroud)

编辑:如上所示派生将允许您从基ObservableCollection<T>类继承所有可访问的成员,但您将无法调用其(非默认)构造函数.因此,您通常希望实现具有与基类相同重载的构造函数:

public class MyType : ObservableCollection<MyClass>
{
    public MyType()
        : base()
    { }

    public MyType(IEnumerable<MyClass> collection)
        : base(collection)
    { }

    public MyType(List<MyClass> list)
        : base(list)
    { }
}
Run Code Online (Sandbox Code Playgroud)