C#:为什么这个静态赋值不起作用?

标签 c#

我收到错误消息“名称 _client 在当前上下文中不存在。” “数据库”变量也是如此。

namespace MongoDB_Test
{
    class Program
    {
        protected static IMongoClient _client;
        protected static IMongoDatabase _database;

        _client = new MongoClient(); // error here
        _database = _client.GetDatabase("test"); // same error but for _database variable

    }
}

我没有收到以下代码的错误:

namespace MongoDB_Test
{
    class Program
    {
        protected static IMongoClient _client = new MongoClient();
        protected static IMongoDatabase _database = _client.GetDatabase("test");
    }
}

为什么第一段代码会出现错误?

最佳答案

您不能在方法之外编写代码,除非它是基本的声明/初始化行。命令式代码语句在方法范围之外并没有真正意义。这就是您的第二个示例起作用的原因。

但是,您可以编写静态构造函数:

class Program
{
    protected static IMongoClient _client;
    protected static IMongoDatabase _database;

    static Program()
    {
        _client = new MongoClient();
        _database = _client.GetDatabase("test");
    }
}

请记住,字段初始值设定项(静态或实例)和构造函数(静态或实例)和方法在对象构造期间的执行时间完全不同。如果代码依赖于计时,您需要确保在需要时进行初始化。

关于C#:为什么这个静态赋值不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33637357/

相关文章:

c# - 某些操作后调用 pageload

c# - 找出程序/文件安装在硬盘上的哪个位置

c# - 按日期值排序列表

c# - (MyClassName)object 与对象作为 MyClassName

c# - 了解动态内存关键字新

c# - 如何同时调用此构造函数和基本构造函数

c# - 将 global.asax 迁移到 ASP.NET 5

c# - 属性中的冒号被 XmlDocument 截断了吗?

c# - 如何使用 Log4Net 在日志文件中获取当前用户名而不是 AppPool 标识

c# datagridview 行宽在滚动时自动增加