.NET - 可以自定义类型
本文关键字:自定义 类型 NET | 更新日期: 2023-09-27 18:30:05
在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)
{ }
}
看起来您正在尝试在代码中创建类型别名。 VB.Net 确实以Imports
指令的形式支持这一点
Imports myType = System.Collections.Generic.ObservableCollection(Of myClass)
...
Private LotsOfData As ObservableCollection(Of myType)
注意:必须对要使用 myType
的每个文件重复 Imports
指令。
您可以在 .Net Delphi 语言 Oxygene 中定义类型别名。与经典德尔菲相同的语法。
type
MyType = ObservableCollection<MyClass>;
可以使用 public
使名称在其他程序集中可见。
从 IEnumerable 开始,其中 T 是你正在操作的类型。 有许多实现,包括List<T>
,它允许您轻松排序,推送和弹出元素。
例如。。。
var myListOfThings = new List<Thing>();
myListOfThings.Add(new Thing {Name = "Green thing" });
myListOfThings.Add(new Thing { Name = "Red thing" });
myListOfThings.Add(new Thing { Name = "Yellow thing" });
当使用IEnumerable时,你可以访问LINQ...
var redThing = myListOfThings.FirstOrDefault(x => x.Name == "Red Thing");
和简单的迭代...
foreach(var thing in myListOfThings)
{
// do something
}
注意:我没有任何 VB 示例,但您使用 C# 标记了问题,所以我希望这些示例有用。