c# - C#初始化静态类的静态对象成员
问题描述
我有一个静态 XDocument 属性,但无法将其设置为某个值。
涉及的代码如下:
public static class ProjectXmlEngine
{
public static XDocument ProjectsDataFile { get; set; }
}
在我的程序类中,我这样设置:
static class Program
{
AppConfig.Initialize();
ProjectXmlEngine.ProjectsDataFile = XDocument.Load(AppConfig.ProjectsDataFile);
}
我收到内部异常错误:“对象引用未设置为对象的实例。”
我的应用程序中其他地方的属性没有引发此异常,但它们在字符串、int、bool 的位置是否与此属性作为对象有关?
编辑
public static class AppConfig
{
private static string projectsDataFile;
static AppConfig()
{
ProjectsDataFile = ConfigurationManager.AppSettings["ProjectsDataFile"];
}
public static string ProjectsDataFile
{
get { return projectsDataFile; }
set { projectsDataFile = ConvertTokenToValue(value); }
}
public static void Initialize()
{
}
}
此类没有与ProjectXmlEngine
编辑 2(解决方案)
我找到了导致错误的原因。
该类ProjectXmlEngine
包含我没有提到的其他代码行,因为我认为它与问题无关。
该类包含一些依赖于我的属性的字段变量:
public static class ProjectXmlEngine
{
public static XNamespace Namespace = ProjectsDataFile.Root.GetDefaultNamespace();
// In the above line the 'ProjectsDataFile' property is null when this field's value is set
public static XName TagProject = Namespace + "project";
public static XName TagProjCode = Namespace + "wpcode";
public static XName TagProjName = Namespace + "wpname";
}
我通过添加一个静态构造函数并在这个构造函数中设置字段的值来解决这个问题。
public static class ProjectXmlEngine
{
private static XDocument projectsDataFile;
public static XNamespace Namespace;
public static XName TagProject;
public static XName TagProjCode;
public static XName TagProjName;
static ProjectXmlEngine()
{
ProjectsDataFile = XDocument.Load(AppConfig.ProjectsDataFile);
Namespace = ProjectsDataFile.Root.GetDefaultNamespace();
TagProject = Namespace + "project";
TagProjCode = Namespace + "wpcode";
TagProjName = Namespace + "wpname";
}
public static XDocument ProjectsDataFile { get; set; }
}
解决方案
推荐阅读
- applescript - AppleScript: "use framework" errors out in "Expected end of line, etc. but found identifier."
- javascript - JS Regex solution to turn reddit style links into html?
- animation - 当我使用带有 blit = True 的 matplotlib 动画函数时,如何保留最后一帧
- javascript - 如何制作一个通用的正则表达式来验证通过 JS 输入的 UTF-8 特殊字符?
- macos - gmp error: cannot determine how to define a 32-bit word
- javascript - 检查复选框的状态
- c - What would happen if I call getpeername() and getsockname() on server socket at different positions?
- ios - SpriteKit 场景变得无响应
- java - 对于某些文件,加载文件图标有时很慢
- android - 如何在没有 READ_CONTACTS 权限的情况下获取 Android 联系人详细信息