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

标签 c# vb.net delphi types

在 Delphi 中你可以这样做:

TArray = array[1..3] of byte;

然后你可以在哪里声明

T2Array = array[1..3] of TArray

广告恶心...

.NET 中是否存在类似的东西? (vb、c# 等等)

我现在正在做这样的事情

Private LotsOfData As ObservableCollection(Of ObservableCollection(Of myClass))

但想做

Private LotsOfData As ObservableCollection(Of myType)

在哪里

myType -->  ObservableCollection(Of myClass)

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

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

Dim LotsOfData as ObservableCollection(of MyType)

但是您必须将其引用为(例如)

LotsOfData.Last.myOc(i) 

代替

LotsOfData.Last(i)

这看起来很笨拙。这也显得笨拙:

For Each Data as ObservableCollection(of myClass) in LotsOfData
     DoSomething(Data)
Next

同样

For Each Data as MyType in LotsOfData
     DoSomething(Data.myOc)
Next

什么时候可以

For Each Data as MyType in LotsOfData
     DoSomething(Data)
Next

有什么想法吗?

最佳答案

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

public class MyType : ObservableCollection<MyClass>
{ }

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

ObservableCollection<MyType> lotsOfData = new ObservableCollection<MyType>();

当你迭代它时,你会得到内部集合的序列:

foreach (ObservableCollection<MyClass> data in lotsOfData)
{
    DoSomething(data);
}

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

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

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

    public MyType(List<MyClass> list)
        : base(list)
    { }
}

关于c# - .NET - 自定义类型可能吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10035638/

相关文章:

c# - 如何有效地削减字典中的词条数量?

c# - 添加到多对多关系表会在数据库中产生重复值

asp.net - 使用 VB.NET 从 DataGrid 中获取选定行的数据

vb.net - 该进程无法访问该文件,因为它正被另一个进程使用

delphi - 类型化接口(interface)和 Spring4D

delphi - delphi中将字符串字符转换为ascii

c# - 将集合绑定(bind)到列表框

c# - 企业代理适用于 C#,但不适用于 Python

c# - 在 SSRS 报告表达式中添加两个字段值

delphi - 为什么新建组件向导不显示任何祖先类?