我正在创建一个应用程序,它将查找AppSettings,将这些键及其值上拉到DataTable中,使用DataTable编辑或添加键,在编辑后检查重复的键,然后将它们保存回{{1 }}。我目前有三个按钮。
一个是AppSettings
,它会拉出一个单独的数据表,在App.config中显示一个View App Settings并将其显示在数据表上,最后是一个Update Settings按钮,该按钮在输入信息后检查重复的键然后在DataTable上将键及其值保存回AppSettings:
这是App.config文件中的键和值的列表。请注意,我给钥匙起了一个重复的名字:
我正在使用嵌套的for循环来检查重复的键。 System.Collection库仅检查最后一个重复的密钥。它完全忽略了第一个。当我在Visual Studio中向下钻取或将鼠标悬停在items变量“行/结果视图”上时,它只显示5个键对。如上所示,显然有第六对。这是for循环,出于调试目的,我在for循环的末尾放置了一个断点:
我需要它能够在找到重复键时引发异常错误。如果有可能,抛出异常错误消息并突出显示该重复键是什么。另外,请尽可能使System.Collection库不要跳过重复键或忽略重复键。
答案 0 :(得分:0)
您可以使用以下代码查找重复的键:
// Cast the DataTable rows to a list, and select the 'Key' column's Value
var keys = items.Rows.Cast<DataRow>().ToList().Select(r => r["Key"]);
// Find the Duplicate keys
var duplicateKeys = keys.GroupBy(x => x)
.Where(group => group.Count() > 1)
.Select(group => group.Key);
// Throw the exception, containing the keys that are duplicated.
if (duplicateKeys.Count() > 0) {
throw new ConfigurationErrorsException($"Duplicate key(s) found: '{string.Join(", ", duplicateKeys)}' - please revise");
}
从数据表中查找键的方法可能有所不同,但是归结为相同的情况。
编辑: 这种方法将替换示例中的所有三个for循环。
对于低于2015年的Visual Studion版本:
throw new ConfigurationErrorsException("Duplicate key(s) found: " + string.Join(", ", duplicateKeys) + " - please revise.");