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

rez*_*eza 1 c# constructor list subclass

我正在尝试在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;
     ....
    }
Run Code Online (Sandbox Code Playgroud)

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

     public new void Add(datum x ) {
        base.Add(x);
        this.dirty = true;
    }
Run Code Online (Sandbox Code Playgroud)

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

    public dataSet(int count) {
        this = (dataSet) new List<datum>(count);
    }
Run Code Online (Sandbox Code Playgroud)

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

    public dataSet(List<datum> data) {
        this.AddRange(data);
    }
Run Code Online (Sandbox Code Playgroud)

我遇到一个帖子,说你应该使用一个Collection,一个List用于速度.虽然我需要速度,但我不确定为什么收藏会更好?

--UPDATE--

我不想使用linq,因为你不能像这样有效地创建同时计算max/min的东西:

    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];
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

日Thnx

Jon*_*eet 7

我正在尝试在List周围创建一个包装器以执行我想要的一些特定事情,例如计算最大最小值,从某些元素中提取特定值等.

别.只需使用LINQ to Objects.这就是它的设计目的:

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

总的来说,我建议不要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.
}
Run Code Online (Sandbox Code Playgroud)

有关构造函数链的更多信息,请参阅我关于构造函数的文章.

(我还强烈建议你改名字- dataSet不符合.NET命名约定,并且DataSet将意味着别的东西完全大多数.NET开发人员.)