Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.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# ConfigurationElementCollection中的无键元素_C#_.net_Configuration_Config_Custom Configuration - Fatal编程技术网

C# ConfigurationElementCollection中的无键元素

C# ConfigurationElementCollection中的无键元素,c#,.net,configuration,config,custom-configuration,C#,.net,Configuration,Config,Custom Configuration,继承ConfigurationElementCollection时: public class Directories : ConfigurationElementCollection { ... } ConfigurationElementCollection需要实现GetElementKey(System.Configuration.ConfigurationElement) 但我不关心密钥,因为我有一个自定义配置部分,如下所示: <directorySection>

继承ConfigurationElementCollection时:

public class Directories : ConfigurationElementCollection
{
    ...
}
ConfigurationElementCollection
需要实现
GetElementKey(System.Configuration.ConfigurationElement)

但我不关心密钥,因为我有一个自定义配置部分,如下所示:

<directorySection>
  <directories>
    <directory pickUpDirectory="C:\Users\User\Documents\PickUp\0" dropOffDirectory="C:\Users\User\Documents\DropOff\0"/>
    <directory pickUpDirectory="C:\Users\User\Documents\PickUp\0" dropOffDirectory="C:\Users\User\Documents\DropOff\0"/>
    <directory pickUpDirectory="C:\Users\User\Documents\PickUp\1" dropOffDirectory="C:\Users\User\Documents\DropOff\1"/>
    <directory pickUpDirectory="C:\Users\User\Documents\PickUp\2" dropOffDirectory="C:\Users\User\Documents\DropOff\2"/>
  </directories>
</directorySection>

它可以有多个元素,每个元素都是无键的,这个结构应该允许重复(如上所述)。那么在这种情况下我应该怎么做呢?

试着这样使用

[ConfigurationCollection(typeof(SchedulerTaskItem), AddItemName = "Task")]
public class SchedulerTaskCollection: ConfigurationElementCollection
{
    private static readonly ObjectIDGenerator idGenerator = new ObjectIDGenerator();

    protected override ConfigurationElement CreateNewElement()
    {
        return new SchedulerTaskItem();
    }

    protected override object GetElementKey(ConfigurationElement element)
    {
        bool firstTime;
        return idGenerator.GetId(element, out firstTime);
    }
}

然后不要继承
ConfigurationElementCollection
:)使用另一种方法来解析/生成xml。@L.B最初我打算沿着这条路走,但现在好像我别无选择;没有任何东西支持自定义.config节的这种开箱即用的方式?您是否尝试过只读取自定义节的应用程序配置文件,并将其反序列化为适合您需要的任何类?@Louis我想L.B.建议了这一点可能我误解了@L.B答案,我觉得它更一般。现在我读了我的,其实没什么不同。无论如何,只要知道XML结构,就根本不需要实现ConfigurationElement。例如,您可以始终使用LINQXML读取应用程序设置[“目录”]。也许我看不到你的要求?