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
我正在尝试在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开发人员.)