Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用WPF和C检查重复密钥#_C#_Wpf_Visual Studio 2017_Configurationmanager_System.configuration - Fatal编程技术网

C# 使用WPF和C检查重复密钥#

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文件中的键和值的列表。注:我已

我正在创建一个应用程序,它将查找AppSettings,将这些键及其值向上拉入DataTable,使用DataTable编辑或添加键,编辑后检查重复键,并将它们保存回AppSettings。我现在有三个按钮

一个是
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.");