"var" 调试显示不存在 "System.Configuration.KeyValueInternalCollection",这是怎么回事?

"var" debugging reveals unexisting "System.Configuration.KeyValueInternalCollection", what's going on?

我在读取 C# 配置文件时遇到了很大的困难,这是我最近的失败:

我的配置文件中有所有部分的名称,它们存储在一个名为 namesList<string> 中。我想阅读其内容,为此我执行以下操作:

foreach (string section_name in names)
{
   var interface_settings = ConfigurationManager.GetSection(section_name);
   // do something with "interface_settings"
}

我不知道interface_settings是什么类型,所以我调试了这段代码,为了在watch-window中看到interface_settings,确实:
interface_settings 被提及为类型 System.Configuration.KeyValueInternalCollection

我相应地更新了我的源代码:

foreach (string section_name in names)
{
   System.Configuration.KeyValueInternalCollection interface_settings = 
     ConfigurationManager.GetSection(section_name);
   // do something with "interface_settings"
}

此代码错误:System.Configuration.KeyValueInternalCollection不存在!

Visual Studio watch-window 怎么可能显示一个不存在的类型?

(我相信我可以找到一些 post,解释如何阅读配置部分和部分组,这个问题特别是关于明显错误的 Visual Studio watch-window 行为。 )

编辑

显然 class KeyValueInternalCollection 存在于文件 KeyValueInternalCollection.cs 中,如 this URL.

中所述

根据我的测试,我重现了你的问题。另外,我同意 Sebastian Schumann 关于改用 NamedValueCollection 的建议。

代码:

foreach (string item in list)
            {
                NameValueCollection section =(NameValueCollection) ConfigurationManager.GetSection(item);

            }

how can I know that a class is an internal class?

Class直接在命名空间内声明的 es、记录和结构(换句话说,没有嵌套在其他 classes 或结构中)可以是 public或内部。 如果未指定访问修饰符,则默认为内部。

来自linkClass, record, and struct accessibility

In order to know the parent class, I used your URL ("referencesource.microsoft.com"), but how can I find the parent class simply using the code?

您可以使用反射来获取 class 名称。

 string type = interface_settings.GetType().BaseType.Name;

This third question is a combination of both: when I find the parent class, how can I know this one is not an internal one? :-)

根据我的测试,你可以在microsoft docs中搜索关键字,你会找到访问修饰符。

例如,link NameValueCollection Class 有以下定义:

public class NameValueCollection : System.Collections.Specialized.NameObjectCollectionBase

可以知道是public类型