gpt4 book ai didi

c# - 在 C# 中继承 List<> 并覆盖构造函数

转载 作者:太空宇宙 更新时间:2023-11-03 17:32:51 25 4
gpt4 key购买 nike

我正在尝试围绕 List 创建一个包装器来做一些我想要的特定事情,例如计算最大最小值、从某些元素中提取特定值等。

我从

开始
    public struct datum {
public UInt32[] chan;
public UInt64 sample_number;
public UInt32 time;
public UInt32 source_sector;
}

public class dataSet : List<datum> {
bool dirty=true;
....
}

方法通常是这样的(我想知道列表是否已被修改,因为我有一个 max()/min() 函数,它只在数据被修改时解析数据,并缓存值以在列表未修改)

     public new void Add(datum x ) {
base.Add(x);
this.dirty = true;
}

但是,我不确定如何创建构造函数。这种语法不起作用。我怎样才能得到这种类型的行为?

    public dataSet(int count) {
this = (dataSet) new List<datum>(count);
}

我也有这个构造函数,虽然未经测试但似乎工作正常(没有编译错误)

    public dataSet(List<datum> data) {
this.AddRange(data);
}

我看到一个帖子说你应该使用 Collection 和 List 来提高速度。虽然我需要速度,但我不确定为什么 Collection 会更好?

--更新--

我不想使用 linq,因为您无法创建像这样高效地同时计算最大/最小值的东西:

    public void recalculateMaxMin() {
foreach (var d in data) {
for (int i = 0; i < 16; i++) {
if (d.chan[i] > max[i]) max[i] = d.chan[i];
if (d.chan[i] < min[i]) min[i] = d.chan[i];
}
}
}

感谢

最佳答案

I'm trying to create a wrapper around List to do some specific things I want, such as compute max min, extract specific values from some elements, etc.

不要。只需使用 LINQ to Objects。这就是它设计的目的:

var list = new List<int> { 10, 20, 30 };
var average = list.Average();
var max = list.Max();
// etc

一般来说,我建议不要从 List<T> 派生无论如何 - 这不是它的设计目的。但是,如果必须,您只需从一个构造函数链接到一个基本构造函数:

public dataSet(int count) : base(count)
{
// Add in any extra code you want to here. Probably none in this case.
// It would execute *after* the base constructor call.
}

查看我的 article on constructors有关构造函数链接的更多信息。

(我还强烈建议您更改名称 - dataSet 不符合 .NET 命名约定,并且 DataSet 对大多数 .NET 开发人员来说意味着 something else entirely .)

关于c# - 在 C# 中继承 List<> 并覆盖构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13335292/

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