C# 如何将新字符串添加到REG_MULTI_SZ类型的注册表项?

C# 如何将新字符串添加到REG_MULTI_SZ类型的注册表项?,c#,.net,windows,registry,C#,.net,Windows,Registry,我有1个注册表项,类型为REG_MULTI_SZ。此条目中已包含一些字符串 现在我想使用.net classRegistryKey向其中再添加一个字符串。此类具有方法key.SetValue(字符串,字符串)。但当我使用这个方法时,它会删除所有已经存在的字符串,然后插入新字符串,简言之,它会覆盖。 我不想触摸已经存在的字符串,只想在末尾添加新字符串。 任何人都知道我们如何在C#中做到这一点。没有其他方法。您必须先读取现有字符串,然后将字符串附加到该字符串,然后将新的连接字符串写回。对于多字符串值

我有1个注册表项,类型为REG_MULTI_SZ。此条目中已包含一些字符串

现在我想使用.net class
RegistryKey
向其中再添加一个字符串。此类具有方法
key.SetValue(字符串,字符串)
。但当我使用这个方法时,它会删除所有已经存在的字符串,然后插入新字符串,简言之,它会覆盖。 我不想触摸已经存在的字符串,只想在末尾添加新字符串。
任何人都知道我们如何在C#中做到这一点。

没有其他方法。您必须先读取现有字符串,然后将字符串附加到该字符串,然后将新的连接字符串写回。

对于多字符串值,我会这样做

key.SetValue("MultipleStringValue", new string[] {"One", "Two", "Three"});

如果是单个值,那么正如Wolfgang所提到的,您应该阅读现有值和附加值。

根据上面Vinayak的回答,如果您想要附加值,您需要读取现有值并使用它

因此:

要获取现有值,该值应返回REG_MULTI_SZ的字符串数组。然后,只需添加新值(或者交换现有值,如果您喜欢的话)。您可以按自己喜欢的方式执行此操作-从数组创建一个列表并向其中添加新值,创建一个带有循环的新字符串数组,使用IEnumerable.Concat

var stringList = new List<string>(registryValue as string[]);
stringList.Add("NewValue");
key.SetValue("KeyName", stringList.ToArray());
var stringList=新列表(registryValue作为字符串[]);
stringList.Add(“新值”);
key.SetValue(“KeyName”,stringList.ToArray());

显然,您希望对这个小示例进行一些防御性编码-确保您实际返回了一个字符串数组,等等。

如果我提到单个字符串,那么它将覆盖旧值,并且将reg entry转换为reg_SZkey.SetValue(“MultipleStringValue”,新字符串[]{“One”});您应该传递一个带有单个字符串的数组。我检查了这个,但它仍然替换了旧的values@sagar,SetValue将替换现有的,这是预期的。如果你想附加到多值,你应该用现有值维护一个内存数组,并覆盖相同的值。谢谢,但我正在寻找其他可能的方法。谢谢,我已经知道了。我在寻找其他可能的方法我不认为还有其他可能的方法,至少不使用Registry类。您可以随时滚动自己的注册表访问库,或者创建一个扩展方法,以便在一次调用中有效地执行此操作。
var stringList = new List<string>(registryValue as string[]);
stringList.Add("NewValue");
key.SetValue("KeyName", stringList.ToArray());