0

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

这是代码片段:

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


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

}

我的问题是:在 MyClass 构造函数中访问 InvalidChars 时,是否有任何情况可以返回 null?显然有,因为这是我在我的应用程序中看到的。虽然我不明白这怎么可能。

4

2 回答 2

0

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

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

public readonly int y = 5;

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

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

于 2013-03-28T07:37:07.870 回答
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? 
        }
    } 

}

难怪我得到一个空值。

于 2013-03-28T09:06:51.567 回答