- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
示例代码:
EDITED :澄清示例。抱歉造成任何困惑。
using System.Collections.Specialized;
using System.Configuration;
...
// get collection 1
NameValueCollection c1 = ConfigurationManager.AppSettings;
// get collection 2
ExeConfigurationFileMap map = new ExeConfigurationFileMap();
map.ExeConfigFilename = "c:\\SomeConfigFile.config";
Configuration config = ConfigurationManager.OpenMappedExeConfiguration(map, ConfigurationUserLevel.None);
KeyValueConfigurationCollection c2 = config.AppSettings.Settings;
// do something with collections
DoSomethingWithCollection(c1);
DoSomethingWithCollection(c2);
...
private void DoSomethingWithCollection(KeyValueConfigurationCollection c)
{
foreach(KeyValueConfigurationElement el in c)
{
string key = el.Key;
string val = el.Value;
// do something with key and value
}
}
private void DoSomethingWithCollection(NameValueCollection c)
{
for(int i=0; i < c.Count; i++)
{
string key = c.GetKey(i);
string val = c.Get(i);
// do something with key and value
}
}
目前有两个版本的 DoSomethingWithCollection 可以接受 NameValueCollection 或 KeyValueConfigurationCollection。
是否有一种更简洁的方法来做到这一点,以便只有一个版本的 DoSomethingWithCollection ?
谢谢。
最佳答案
好吧,DoSomethingWithCollection 应该接受两个参数 - 1) ICollection/IEnumerable 允许您枚举所有值 2) Delegate 将获取对象并将键和值返回给您。因此,您基本上需要编写两种不同的方法来为两种类型的集合解析项目。
编辑:给出一个想法的示例代码。
delegate void KeyValueItemParser(object item, out string key, out string value);
void DoSomethingWithCollection(ICollection items, KeyValueItemParser parser)
{
string key, value
foreach(object item in items)
{
parser(item, out key, out value);
// do whatever you want to with key & value
}
}
编辑 2:不确定不需要委托(delegate)是什么意思 - 如果您需要一个版本的 DoSomethingWithCollection,您至少需要一些在两个集合中工作不同的代码。委托(delegate)将是最简单的方法。另一种方法是定义一个接口(interface),该接口(interface)将提供 NamedValuePair/KeyValuePair 的集合/枚举,然后写入为不同类型的目标集合实现该接口(interface)的包装类。模板代码将是
interface IKeyValuePairCollection
{
int Count {get; }
KeyValuePair<string, string> Item(int index) { get; }
}
class NamedValueCollectionWrapper : IKeyValuePairCollection
{
private NamedValueCollection _inner;
public NamedValueCollectionWrapper(NamedValueCollection target)
{
-inner = target;
}
// roll out ur implementation to IKeyValuePairCollection
}
class KeyValueConfigurationCollectionWrapper : IKeyValuePairCollection
{
...
}
IMO,对于一个简单的需求来说,工作量太大了。
关于c# - 重构以将 NameValueCollection 和 KeyValueConfigurationCollection 作为参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3554041/
在我尝试用内部 NameValueCollection 初始化 NameValueCollection 后,c# 编译器说必须是 NameValueCollection(string,string)。
有没有办法从 NameValueCollection 中提取与特定模式/命名约定相关的键,而不必遍历集合中的每个值? 最佳答案 名称值集合的设计并不是特别有效地进行这样的搜索。无论您使用哪种方法,它都
我必须将通用对象转换为 NameValueCollection。我正在尝试使用反射。虽然我可以获得父属性,但我无法获取作为对象的父属性的属性。 Class One public string name
有人可以阐明我的 NameValueCollection 返回 Length 属性而不是 Name 和 Value 可以告诉我我在这里做错了什么。我无法为下拉列表设置 DataTextField 或
如何将动态转换为 NameValueCollection? 我尝试将它转换为字典,然后转换为 NameValueCollection,但它会针对不同类型抛出异常。 [...] NameValueC
我读过 NameValueCollection 允许添加重复的键,但是当我尝试使用它时,情况似乎并非如此。 我的代码 using (var wb = new WebClient()) { v
我有两个 NameValueCollection: NameValueCollection customTag = (NameValueCollection)System.Configuration.
假设我有一个匿名类实例 var foo = new { A = 1, B = 2}; 有没有快速生成 NameValueCollection 的方法?我想在事先不知道匿名类型的属性的情况下获得与下面的
我有一个 NameValueCollection,我想遍历这些值。目前,我正在这样做,但似乎应该有一种更简洁的方法来做到这一点: NameValueCollection nvc = new NameV
在 automapper 中,如何将名称值集合映射到强类型集合? Mapper.Map>(); public class MetaModel { public string Name;
例如,如果我们有 {"Parameters":["name" : "test"]}它将被序列化为 {"Parameters":["name"]} . (使用 System.Text.Json) 这是为
有没有办法使 NameValueCollection 或派生类可序列化? 最佳答案 NameObjectCollectionBase ( NameValueCollection 的基类)已经实现了 I
有谁知道断言 NameValueCollection 是否等效的好方法?目前我正在使用 NUnit,但 CollectionAssert.AreEquivalent() 似乎只声明键。不是键和值。 我
我有枚举, public enum ClearAttributes { S_DURATION, S_TYPE } 我正在使用枚举中的描述将项目添加到 NameValueCollecti
NameValueCollection x = new NameValueCollection(Request.QueryString); string x1 = x.ToString(); Name
我有一个 NameValueCollection 变量 queryDict。 有些键没有值。但是我想遍历所有键,即使它们没有关联的值。 使用这个,如果值为空,我得到 null 而不是键名: forea
如果不是,确定两个 NameValueCollections 对象是否相等的最佳方法是什么。 我用它来确定解析到名称值集合中的两个查询字符串是否具有相同的键和值,而不管顺序如何。 最佳答案 Equal
我有一种情况,我不能使用字典来收集字符串的名称值。我的名称值对包含重复键,因为我需要支持遗留系统。所以请不要让我停止支持重复键。我尝试使用 NameValueCollection 但这不能与 Data
在我的 web.config 中,我将配置部分分解为单独的文件: 然后我使用 ConfigurationManager 检索设置: NameValueCollection appSettings
在 .NET(反)序列化的幕后发生了什么,使它的行为方式与它在以下场景中的行为方式相同? (这是一个测试应用程序,仅用于说明我的设置。) 我有一个带有 NameValueCollection 属性的类
我是一名优秀的程序员,十分优秀!