6
votes

Comment combiner deux namevaluecollections?

J'ai deux namevaluecollections: xxx

J'ai essayé CustomTag.add (appSetage); méthode mais je reçois cette erreur: la collection est en lecture seule .

Comment puis-je les combiner à un, afin que je puisse accéder à tous les éléments des deux?


5 commentaires

Que voulez-vous faire s'ils ont tous les deux la même valeur clé?


Ils devraient écraser.


Qui devrait écraser?


Celui qui est ajouté devrait écraser l'original. Dans ce cas, l'appSeting devrait écraser CustomTag.


Compte tenu du message d'exception, il semble que vous devriez créer un nouveau nom de code nomeucollection et copier tous les éléments dans cela. Notez que vous devrez vous inspirer, appeler la méthode namevaluecollection.set () , comme le comportement par défaut de namevaluecollection est d'ajouter la valeur ajoutée à la liste des valeurs existantes , ne pas les écraser.


3 Réponses :


8
votes

Pour combiner les collections, essayez quelque chose comme ce qui suit: xxx

Utilisez la nouvelle collection AllseSettings pour accéder aux paramètres combinés.


4 commentaires

Comment ces paramètres de chaîne de requête semblable à ceux-ci?


@Palswim je n'avais pas testé cela spécifiquement. Y a-t-il un exemple que vous pouvez me donner qui ne fonctionne pas?


Et si vous ne voulez pas écraser mais fusionner / combiner?


Salut, @timschmelter. Vous pouvez utiliser la méthode Ajouter pour fusionner NameValuecollections sans remplacer ce qui est déjà là. Les valeurs avec la même clé sont combinées dans des chaînes séparées par des virgules. S'il vous plaît voir Docs. microsoft.com/en-us/dotnet/api/...



5
votes

J'ai essayé CustomTag.add (appSetage); code> méthode mais je reçois cette erreur: la collection est en lecture seule. Code> P>

Ceci signifie que l'objet CustomTag code> est en lecture seule et ne peut pas être écrit à. .add code> tente de modifier l'original namevaluecollection code>. System.Configuration Code> Contient un ReadonlyNameValuecollection Code> qui s'étend nomvaluecollection code> pour le rendre en lecture seule, et donc malgré la mise en forme sur le générique namevaluecollection code >, l'objet est toujours en lecture seule. P>

Comment puis-je les combiner à un, afin que je puisse accéder à tous les éléments des deux? p> blockQuote>

Tout ce dont vous avez besoin est d'ajouter les deux collections à une troisième référence écrite namevaluecollection code>. p>

donné: p>

var collection = new NameValueCollection(customTag);
collection.Add(appSettings);


1 commentaires

Je me demandais à ce sujet! Beaucoup plus propre que la réponse acceptée.



0
votes

réponse par ZZZZBOV est terminé. Toutefois, si vous souhaitez fusionner plusieurs nomsValuecollection ou ne pas modifier l'un des originaux, vous pouvez envisager la méthode suivante qui fusionne un nombre arbitraire de namevaluecollection .

code xxx

Exemple d'utilisation xxx

La méthode est également suffisamment robuste pour supporter Fusionner (NULL) ou Fusion () et renvoie simplement un NomBevaluecollection . Cela garantira que votre code ne propose pas d'exceptions en raison de la mauvaise entrée.


1 commentaires

Que se passe-t-il avec des touches en double qui est la partie intéressante de la méthode de fusion?