public 字符串不会 return 所有信息

public string wont return all information

正在尝试解决这个问题.. 已经搜索了一段时间但一无所获。

我在 form1 中有以下代码并且运行良好。

    Connection.tanv = txtUser.Text;
    Connection.tpass = txtPasswd.Text;
    try {
        connection = new MySqlConnection("datasource=localhost;port=3306;database=Diary;username=" + Connection.tanv + ";password=" + Connection.tpass + "");

在名为 Connection 的 class 中,我有以下代码

public class Connection
{
    public static string tanv { get; set; }
    public static string tpass { get; set; }
    public static string strcon = "datasource=localhost;port=3306;database=Diary;username=" + tanv + ";password=" + tpass + "";
}

当我这样做时

Messagebox.Show(Connection.tanv);

我得到了正确的信息

但是当我尝试做

Messagebox.Show(Connection.strcon);

我只得到文本而不是其他字符串的信息...我做错了什么?

public static string strcon = "datasource=localhost;port=3306;database=Diary;username=" + tanv + ";password=" + tpass + "";

这是一个静态字段。它被初始化一次。当它被初始化时,tanvtpass 仍然是 null,所以这没有做任何有用的事情。

您希望每次请求 strcon 时都进行字符串连接。为此,将其设为 属性:

public static string strcon => "datasource=localhost;port=3306;database=Diary;username=" + tanv + ";password=" + tpass + "";
//                         ^^^^

strcon 属性 在 tanvtpass 属性尚未填充时初始化。用 getter 实现 strcon 属性 然后它将反映 tanvtpass

的变化

计算机程序按顺序执行。你的执行顺序是(大致):

  1. Connectionclass分配space。
  2. Connection执行静态初始化class:

    一个。 tanv = null

    b。 tpass = null

    c。 strcon = string.Concat("datasource=localhost;port=3306;database=Diary;username=", tanv, ";password=", tpass)

  3. 运行 你的其他代码

    一个。设置 tanv

    b。设置 tpass

    c。阅读 strcon.

可以看到,tanvtpass的值是在第3步设置的,来不及被第2步的string.Concat操作发现

一个解决方法是不将 string.Concat 的结果保存在静态变量中,而是在每次读取 strcon 时重复它。这是通过创建一个字段来完成的。 hvd 显示了 C# 7 中可用的闪亮新方法;对于以前的版本,您需要编写

public static string strcon
{ get { return "datasource=localhost;port=3306;database=Diary;username=" + tanv + ";password=" + tpass + ""; } }