首页 > 解决方案 > 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; }
}

标签: c#propertiesinitializationgetter-setter

解决方案


推荐阅读