静态字段无法初始化

时间:2013-03-28 07:31:37

标签: c# .net

我简化了我的问题,因为扩展方法与它无关。

以下是代码段:

class MyClass
{
    private static readonly char[] InvalidChars = new []{'\\', '/'};


    public MyClass()
    {
        if (InvalidChars == null)
        {
             //how can this block be accessable? 
        }
    } 

}

我的问题是:在MyClass构造函数中访问InvalidChars时,是否有任何情况可以返回null?显然有,因为我在我的应用程序中看到的。虽然我无法理解可能的方法。

2 个答案:

答案 0 :(得分:0)

由于您已将其标记为静态,因此只能在类的静态构造函数中初始化readonly变量。

在声明中初始化变量时,例如:

public readonly int y = 5;

对于实例字段,在包含字段声明的类的实例构造函数中,或静态字段,在包含字段声明的类的静态构造函数中。这些也是将readonly字段作为out或ref参数传递的唯一上下文。

因此,当您在声明中删除static关键字时,您将能够在构造函数中初始化变量。

答案 1 :(得分:0)

Ohoho,对不起伙计们,我仔细查看了调用堆栈后发现了这个问题。你是对的,我的代码示例不完整。这是完整版本:

class MyClass
{
    private static readonly MyClass Default = new MyClass();
    private static readonly char[] InvalidChars = new []{'\\', '/'};


    public MyClass()
    {
        if (InvalidChars == null)
        {
         //how can this block be accessable? 
        }
    } 

}

难怪我得到了一个空白。