很困惑为什么一个标签.tag属性,没有做我认为它应该做的事情
本文关键字:为什么 属性 tag 标签 一个 | 更新日期: 2023-09-27 18:04:44
我在WinForms应用程序中使用c#。我试图根据文件的日期设置标签的值。"文件。如果没有找到文件,GetLastWriteTime"方法将返回"12/31/1600"。如果没有,我希望标签显示"未找到"。步进执行下面的代码时,lblsql的值。标签比赛是12/31/1600。然而"If"语句发现它为假。
lblSqlC.Tag = File.GetLastWriteTime(@"c:'sql.exe").ToShortDateString();
if (lblSqlC.Tag == "12/31/1600")
{
lblSqlC.Text = "Not Found";
}
else
{
lblSqlC.Text = lblSqlC.Tag;
}
我错过了什么?谢谢。
如果使用==
操作符,则需要将字符串作为字符串进行比较。所以这个block:
if (lblSqlC.Tag == "12/31/1600")
{
lblSqlC.Text = "Not Found";
}
应该改为:
if ((string)lblSqlC.Tag == "12/31/1600")
{
lblSqlC.Text = "Not Found";
}
或:
if (lblSqlC.Tag != null && lblSqlC.Tag.Equals("12/31/1600"))
{
lblSqlC.Text = "Not Found";
}
否则,正如@dtb所提到的,它只是使用在object
上定义的默认==
操作符,并测试引用是否相等(它们可能不相等),而不是它们的值。
你的代码有多个问题:
-
标签属性为Object类型,因此您的比较测试存储在标签属性中的对象是否与
"12/31/1600"
相同的引用,但事实并非如此。 -
您正在将DateTime值转换为字符串,这会根据操作系统的区域设置产生不同的字符串。所以即使。
使用文件。Exists用于检查文件是否存在:
if (!File.Exists(@"c:'sql.exe"))
{
lblSqlC.Text = "Not Found";
}
else
{
lblSqlC.Text = File.GetLastWriteTime(@"c:'sql.exe").ToShortDateString();
}
如果你真的想避免使用File。存在,比较File返回的值。GetLastWriteTime转换为DateTime值,而不转换为字符串:
DateTime dt = File.GetLastWriteTime(@"c:'sql.exe");
// If the file does not exist, GetLastWriteTime returns 12:00 midnight,
// January 1, 1601 A.D. (C.E.) Coordinated Universal Time (UTC), adjusted
// to local time.
if (dt == new DateTime(1601, 1, 1, 0, 0, 0, DateTimeKind.Utc))
{
lblSqlC.Text = "Not Found";
}
else
{
lblSqlC.Text = dt.ToShortDateString();
}