gpt4 book ai didi

c# - 如何获取特定类型的所有部分

转载 作者:行者123 更新时间:2023-11-30 17:43:37 25 4
gpt4 key购买 nike

假设我的配置中有以下内容:

<configSections>
<section name="interestingThings" type="Test.InterestingThingsSection, Test" />
<section name="moreInterestingThings" type="Test.InterestingThingsSection, Test" />
</configSections>

<interestingThings>
<add name="Thing1" value="Seuss" />
</interestingThings>

<moreInterestingThings>
<add name="Thing2" value="Seuss" />
</moreInterestingThings>

如果我想获取任何一个部分,我可以很容易地通过名称获取它们:

InterestingThingsSection interesting = (InterestingThingsSection)ConfigurationManager.GetSection("interestingThings");
InterestingThingsSection more = (InterestingThingsSection)ConfigurationManager.GetSection("moreInterestingThings");

但是,这取决于我的代码知道该部分在配置中是如何命名的——它可以命名为任何东西。我更喜欢的是能够从配置中提取类型为 InterestingThingsSection 的所有部分,而不考虑名称。我怎样才能以灵活的方式解决这个问题(因此,同时支持应用程序配置和网络配置)?

编辑:如果您已经有了配置,那么获取实际部分并不太难:

public static IEnumerable<T> SectionsOfType<T>(this Configuration configuration)
where T : ConfigurationSection
{
return configuration.Sections.OfType<T>().Union(
configuration.SectionGroups.SectionsOfType<T>());
}

public static IEnumerable<T> SectionsOfType<T>(this ConfigurationSectionGroupCollection collection)
where T : ConfigurationSection
{
var sections = new List<T>();
foreach (ConfigurationSectionGroup group in collection)
{
sections.AddRange(group.Sections.OfType<T>());
sections.AddRange(group.SectionGroups.SectionsOfType<T>());
}
return sections;
}

但是,如何以普遍适用的方式获取 Configuration 实例?或者,我怎么知道我应该使用 ConfigurationManager 还是 WebConfigurationManager

最佳答案

到目前为止,这似乎是最好的方法:

var config = HostingEnvironment.IsHosted
? WebConfigurationManager.OpenWebConfiguration(null) // Web app.
: ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); // Desktop app.

关于c# - 如何获取特定类型的所有部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30629616/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com