代码之家  ›  专栏  ›  技术社区  ›  Lonnie Best

是否可以在初始化*类*时动态设置静态字符串?

c#
  •  1
  • Lonnie Best  · 技术社区  · 14 年前

    我试图在编译时动态创建连接字符串:

    private static string m_ConnectionString
    {
        get 
        {
            string connectionString = @"Data Source=" + myLibrary.common.GetExeDir() + @"\Database\db.sdf;";
            return connectionString;
        }
    }
    public static string ConnectionString = m_ConnectionString;
    

    我一直遇到类型初始化错误。connectionString在运行时结束为空。我试图避免为使用我的代码库的所有应用程序设置连接字符串。对于使用库的每个项目,数据库的位置都不同。我有可以确定更正字符串的代码,但希望在类初始化期间运行它。这可能吗?

    3 回复  |  直到 14 年前
        1
  •  2
  •   Ryan Ische    14 年前

    我同意奥利弗发现错误的方法,但是我想补充一点,你可以把它放在一个静态构造函数中。这将实现您的“在类初始化期间”的要求。

    public static string ConnectionString { get; private set; }
    
    static MyClass()
    {
        ConnectionString = @"Data Source=" + myLibrary.common.GetExeDir() + @"\Database\db.sdf;";
    }
    
        2
  •  2
  •   Oliver    14 年前

    只需设置一个断点并单步执行您的函数,然后尝试找出出错的地方。

    可能会抛出一些您实际上看不到的异常(在一些底层代码中)。要查找这些情况,您应该在visual studio中调试异常并选中列表中的所有框。也许你可以这样找到,为什么你得到一个空值而不是一个字符串。

        3
  •  1
  •   Spike    14 年前

    这段代码是在运行时执行的,而不是编译时。我想你走错了方向。

    另一个作为预生成事件运行的程序可以在编译之前修改resources.resx文件的源代码。然后获取连接字符串作为资源字符串。

    有点怪,但不是我见过的最糟糕的事。我的版本号以类似的方式递增。