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 + "";
这是一个静态字段。它被初始化一次。当它被初始化时,tanv
和 tpass
仍然是 null
,所以这没有做任何有用的事情。
您希望每次请求 strcon
时都进行字符串连接。为此,将其设为 属性:
public static string strcon => "datasource=localhost;port=3306;database=Diary;username=" + tanv + ";password=" + tpass + "";
// ^^^^
strcon
属性 在 tanv
和 tpass
属性尚未填充时初始化。用 getter 实现 strcon
属性 然后它将反映 tanv
和 tpass
的变化
计算机程序按顺序执行。你的执行顺序是(大致):
- 为
Connection
class分配space。
为Connection
执行静态初始化class:
一个。 tanv = null
b。 tpass = null
c。 strcon = string.Concat("datasource=localhost;port=3306;database=Diary;username=", tanv, ";password=", tpass)
运行 你的其他代码
一个。设置 tanv
b。设置 tpass
c。阅读 strcon
.
可以看到,tanv
和tpass
的值是在第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 + ""; } }
正在尝试解决这个问题.. 已经搜索了一段时间但一无所获。
我在 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 + "";
这是一个静态字段。它被初始化一次。当它被初始化时,tanv
和 tpass
仍然是 null
,所以这没有做任何有用的事情。
您希望每次请求 strcon
时都进行字符串连接。为此,将其设为 属性:
public static string strcon => "datasource=localhost;port=3306;database=Diary;username=" + tanv + ";password=" + tpass + "";
// ^^^^
strcon
属性 在 tanv
和 tpass
属性尚未填充时初始化。用 getter 实现 strcon
属性 然后它将反映 tanv
和 tpass
计算机程序按顺序执行。你的执行顺序是(大致):
- 为
Connection
class分配space。 为
Connection
执行静态初始化class:一个。
tanv = null
b。
tpass = null
c。
strcon = string.Concat("datasource=localhost;port=3306;database=Diary;username=", tanv, ";password=", tpass)
运行 你的其他代码
一个。设置
tanv
b。设置
tpass
c。阅读
strcon
.
可以看到,tanv
和tpass
的值是在第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 + ""; } }