【发布时间】:2015-01-20 14:08:01
【问题描述】:
我有很多方法可以返回数据集列表,这些数据集表示为键 (DateTime) 和值(一些 ValueType 或 string,我不知道)对,以及这些数据套装的尺寸可能约为 10 000 件或更多。例如:
public List<DataSet> GetAnyData(...)
{
var resultList = new List<DataSet>(); // Create the list for the base class
resultList.Add(new DoubleDataSet()); // This classes will be filled in this method
resultList.Add(new StringDataSet()); // See the description for them below
return resultList;
}
此方法的结果列表示例:
ListItem1 ListItem2
Date1 Values1 Date2 Values2
01:00 10.5 02:00 "a"
01:15 20.42 02:15 "b"
01:30 30.01 02:30 "c"
收到这些数据集后,我需要通过不同的方式(使用 LINQ)处理它们。而我的问题是:如何创建 DataSet 类?
我尝试了很多解决方案:
1) 使用泛型从 Dictionary 继承 DataSet 类:
abstract class DataSet<T> : Dictionary<DateTime, T> {...}
并创建特定的类:
class DoubleDataSet : DataSet<double> {...}
class StringDataSet : DataSet<string> {...}
但问题是:如何创建可以存储在数据集列表中的基类?
2)创建DataSet的DataItem的类,并在第一个解决方案中使用:
class DataItem
{
public double DoubleValue { get; set; }
public string StringValue { get; set; }
// etc
}
class DataSet : Dictionary<DateTime, DataItem> {...}
但问题是:如何知道我需要取DataItem的什么属性?
3) 将数据存储在object 类中:
public class DataSet : Dictionary<DateTime, object> {...}
public class DoubleDataSet : DataSet
{
public new double this[DateTime key]
{
get { return base[key] as double; }
set { base[key] = value; }
}
}
但问题是:装箱和拆箱怎么样?如果我将有 50 000 个值并且每个值都将转换为对象并返回所需的类型,这将花费大量时间。同样使用 LINQ,DataSet 值的类型将是 object,我需要知道它是什么类型。
4) 将带有数据的字典存储在DataSet 类中:
public class DataSet
{
public Dictionary<DateTime, DataItem> Items {get; set;}
}
public class DoubleDataSet : DataSet
{
public new Dictionary<DateTime, double> Items
{
get { return base.Items // It wouldn't work because there a new dictionary is created
.ToDictionary(q => q.Key, q => q.Value.DoubleValue); }
set { base.Items = value
.ToDictionary(q => q.Key, q => new DataItem(q.Value, null)); }
}
}
但问题是:get { return base.Items.ToDictionary(q => q.Key, q => q.Value.DoubleValue); } 返回Items 字典的新实例,我无法修改原始列表。
那么请帮助我如何创建泛型类型字典的基类以将其存储在列表中?
如果有任何帮助,我将不胜感激!我知道设计(或编码)存在错误,如果有人能帮助我找到它,我会很高兴!有没有可能解决这个问题?
【问题讨论】:
标签: c# .net oop generics dictionary