"var" 调试显示不存在 "System.Configuration.KeyValueInternalCollection",这是怎么回事?
"var" debugging reveals unexisting "System.Configuration.KeyValueInternalCollection", what's going on?
我在读取 C# 配置文件时遇到了很大的困难,这是我最近的失败:
我的配置文件中有所有部分的名称,它们存储在一个名为 names
的 List<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类型
我在读取 C# 配置文件时遇到了很大的困难,这是我最近的失败:
我的配置文件中有所有部分的名称,它们存储在一个名为 names
的 List<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类型