我有一个Data<TData, TKey>
类,它基本上包装了一个字典。我希望有一个构造函数,它可以接受另一个Data类,复制值,并接受一个新键。
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>
,则强制传入类和新类具有相同的类型键。它们可能没有相同类型的键。应该有一种在Data<TData,?>
中传递的方法,就像在Java中一样。
可能是…
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);