【发布时间】:2010-09-14 12:40:28
【问题描述】:
我有一个字典,它根据传入的值返回一个方法。定义如下:
Dictionary<Type, IXmlWriterConverter>
我现在添加了一个新函数,它的 Key/type 设置为 IEnumerable,到目前为止一切都很好。 但是当我使用包含两个 DataTables 的 List 执行单元测试但字典找不到键时,例如我的类型转换不同。
为什么会这样?解决我的问题的正确尝试是什么?
编辑:抱歉,这里是请求的代码;-)
生成测试值的函数:
public IEnumerable<DataTable> CreateTestDataTableList()
{
var resultDataTable = new List<DataTable>();
resultDataTable.Add(CreateTestTable("testTable1", 2));
resultDataTable.Add(CreateTestTable("testTable2", 3));
return resultDataTable;
}
单元测试调用的函数:
public void Write(XmlWriter xmlWriter, object value)
{
...
converter = FindConverter(value.GetType());
}
查字典功能:
public IXmlWriterConverter FindConverter(Type type)
{
if(Converters.ContainsKey(type))
{
return Converters[type];
}
return null;
}
2.编辑:
将值添加到字典的代码:
public void Add(IXmlWriterConverter xmlWriterConverter)
{
if(Converters.ContainsKey(xmlWriterConverter.InputType))
{
Remove(xmlWriterConverter);
}
Converters.Add(xmlWriterConverter.InputType, xmlWriterConverter);
}
InputType 是转换器的只读(获取)属性。我检查了添加到字典中的类型并注册为 IEnumerable,但是当我在传入列表时检查 typeof 时,类型是 List 而不是 IEnumerable。有人告诉我这是因为我将值作为对象传递。
【问题讨论】:
-
或许你应该把相关代码贴出来,这样其他人才能真正看到发生了什么......
-
你能提供一些示例代码吗?
-
@dkson 也许我应该一开始就这样做.. 抱歉懒惰 ;-)
-
向
Dictionary添加项目的代码在哪里? -
谢谢。我现在发布了我的答案。
标签: c# generics types ienumerable