gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 21:06:06 26 4
gpt4 key购买 nike

在 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com