我有一个基本包裹字典的Data<TData, TKey>
类。我想有一个构造函数,可以采取另一个数据类,复制值,并获取一个新的密钥。
public class Data<TData, TKey>
{
private Dictionary<TKey, List<TData>> keyedData;
public delegate TKey Key(TData row);
public Data(Data<T,K> data, Key keyDelegate, string keyName)
: this(data.Values, keyDelegate, keyName)
{
}
}
当然,Data<T,K>
不起作用。但是,如果构造函数采用Data<TData, TKey>
,则它会强制传入的类和新类具有相同的类型键。他们可能没有相同的类型密钥。应该有一种方法可以像在Java中那样传入Data<TData,?>
。
答案 0 :(得分:2)
也许就像......
public interface IData<TData>
{
IEnumerable<TData> Values { get; }
}
public class Data<TData, TKey> : IData<TData>
{
private Dictionary<TKey, List<TData>> keyedData;
public delegate TKey Key(TData row);
public Data(IData<TData> data, Key keyDelegate, string keyName)
: this(data.Values, keyDelegate, keyName)
{
//...
}
}
或者,你可以制作一个真正的通用方法来处理它。
public class Data<TData, TKey>
{
//...
public void Populate<TOtherKey>(Data<TData, TOtherKey> otherData)
{
// copy otherData.Values into my values
}
}
然后消费者会做类似的事情:
Data<DataType, Key1> data1 = new Data<DataType, Key2>(/*blah blah*/);
Data<DataType, Key2> data2 = new Data<DataType, Key2>(/*blah blah*/).Populate(data1);