【问题标题】:public string wont return all information公共字符串不会返回所有信息
【发布时间】:2018-12-01 21:31:02
【问题描述】:

试图弄清楚这一点..已经搜索了一段时间但没有找到任何地方。

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

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

【问题讨论】:

  • 你在调用strcon之前设置了另外两个字符串吗?

标签: c# string static public


【解决方案1】:

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

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

    一个。 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 + ""; } }

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:
      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 + "";
      //                         ^^^^
      

      【讨论】:

      • 谢谢为我解决了这个问题,也让我更清楚了
      猜你喜欢
      • 1970-01-01
      • 2017-05-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-06
      • 2017-02-21
      • 1970-01-01
      相关资源
      最近更新 更多