公共字符串不会返回所有信息

时间:2018-06-22 11:52:08

标签: c# string static public

试图找出答案。.搜索了一段时间,但没有找到任何地方。

我在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的类中,我有以下代码

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);

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

3 个答案:

答案 0 :(得分:2)

id

这是一个静态字段。初始化一次。初始化时,public static string strcon = "datasource=localhost;port=3306;database=Diary;username=" + tanv + ";password=" + tpass + ""; tanv仍为tpass,因此这无济于事。

您希望字符串连接在每次请求null时发生。为此,使其成为属性:

strcon

答案 1 :(得分:2)

计算机程序按顺序执行。您的执行顺序大致为:

  1. Connection类分配空间。
  2. Connection类执行静态初始化:

    a。 tanv = null

    b。 tpass = null

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

  3. 运行其他代码

    a。设置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 + ""; } }

答案 2 :(得分:0)

lsof -i :8080 //returns the PID (process id) that runs on port 8080 kill 1234 //kill the process using PID (used dummy PID here) lsof -i :8443 kill 4321 属性在strcontanv属性尚未填写时被初始化。使用getter实现tpass属性,然后它将反映strcontanv

中的更改