C# 使用WPF和C检查重复密钥#
我正在创建一个应用程序,它将查找AppSettings,将这些键及其值向上拉入DataTable,使用DataTable编辑或添加键,编辑后检查重复键,并将它们保存回AppSettings。我现在有三个按钮 一个是C# 使用WPF和C检查重复密钥#,c#,wpf,visual-studio-2017,configurationmanager,system.configuration,C#,Wpf,Visual Studio 2017,Configurationmanager,System.configuration,我正在创建一个应用程序,它将查找AppSettings,将这些键及其值向上拉入DataTable,使用DataTable编辑或添加键,编辑后检查重复键,并将它们保存回AppSettings。我现在有三个按钮 一个是ProgrammedBy,它拉出一个单独的数据表,在App.config中查看App Settings并将其显示在数据表上,最后是一个更新设置按钮,在数据表中输入信息后检查重复的键,然后将键及其值保存回AppSettings: 下面是App.config文件中的键和值的列表。注:我已
ProgrammedBy
,它拉出一个单独的数据表,在App.config中查看App Settings并将其显示在数据表上,最后是一个更新设置按钮,在数据表中输入信息后检查重复的键,然后将键及其值保存回AppSettings:
下面是App.config文件中的键和值的列表。注:我已为密钥指定了重复的名称:
我在检查重复关键点的零件上使用嵌套for循环。System.Collection库仅检查最后一个重复密钥。它完全忽略了第一个。当我向下钻取或将鼠标悬停在VisualStudio中的items变量Rows/Results视图上时,它只显示一个5键对。如上图所示,显然有第六对。这里是for循环,为了调试,我在for循环的末尾加了一个断点:
我需要它能够在发现重复密钥时抛出异常错误。如果可能的话,抛出异常错误消息并突出显示该重复键是什么。另外,如果可能,请确保System.Collection库不跳过重复键或忽略重复键。您可以使用以下代码查找重复键:
// 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");
}
如何阅读
appSettings
?使用配置管理器
?它可能使用最后一个重复的设置值,您应该检查它。当用户输入带有现有键的值时,会发生什么情况?删除现有的一个或阻止其创建?嗨@Benny,你有机会看看下面的建议吗?请在这里将文本作为图像交换为格式化文本。图像与剪贴板、屏幕阅读器和搜索引擎不兼容,因此更难帮助您和未来的读者。请注意,我使用字符串插值在引发异常时在字符串中插入变量。这仅适用于VS2105及更高版本,如果您没有,可以使用编辑的方法。还要注意,此方法将替换示例中的所有三个for循环。^Johan,您的其他有用备注可能属于答案本身。
throw new ConfigurationErrorsException("Duplicate key(s) found: " + string.Join(", ", duplicateKeys) + " - please revise.");