2

我正在使用 DataTable 用翻译词典中的数据填充网格视图 - 字面意思是Dictionary<string, string>使用以下代码:

var dt = new DataTable();
dt.Columns.Add("key", typeof(string));
dt.Columns.Add("value", typeof(string));
dt.PrimaryKey = new DataColumn[] { dt.Columns[0] };
foreach(var key in localizer.Keys)
{
    var row = dt.NewRow();
    row[0] = key;
    row[1] = localizer[key];
    dt.Rows.Add(row); // this line throws an error even though identifiers are ascii
                      // and contain no spaces
}

我尝试在循环之后创建主键约束,但随后它引发了另一个异常,指出该列包含不唯一的值。它停止的值是"evalDate"并且还有另外两个相似的键"evalDateStart""evalDateEnd"但没有一个是相同的——这是合乎逻辑的,因为它们是从字典中读取的。

4

1 回答 1

1

实际上,通过稍微研究一下,我发现了拼图中缺失的部分。字典以区分大小写的方式按值比较字符串,但 DataTable 对象以不区分大小写的方式按值比较字符串。
触发器是一个误用的资源键,全为小写,导致键“evaldate”和“evalDate”都出现在字典中。它还解释了为什么异常是不稳定的,它只有在我们在测试期间访问某个页面时才会发生。

于 2013-06-04T07:09:32.157 回答