我最近在我的应用程序中添加了一个函数,它从下载的文件中读取日期,并查找当前日期与文件中日期之间的天数差异。完成后,它会显示在我的某个论坛的标签中。
有一个例外:如果文件中的字符串等于" Lifetime",则不应将其作为日期处理并遵循备用逻辑。但是当我尝试检查字符串是否为" Lifetime"时,即使字符串=" Lifetime"它也不会返回true。
编辑:我在Nisarg的帮助下修复了FormatException。现在,我的标签没有更改为值。这就是问题所在。
EDIT2:我觉得很蠢。我发现我在一个函数中启动Main两次,然后使用main1在表单和main之间切换来设置标签。 这就是标签不能正常工作的原因。感谢Nisarg和所有其他贡献者。
代码示例:
string subScript = File.ReadAllText(Path.GetTempPath() + txtUsername.Text + ".txt");
Main main = new Main();
double dSubLeft;
main.dateLabel.Text = subScript;
if (subScript == "Lifetime") // it bypasses this, apparently blank
{
main.daysLeftLabel.Text = "Expires: Never";
}
if (subScript != "Lifetime") //Goes here and throws error saying subScript is not valid DateTime
{
dSubLeft = Math.Round(Convert.ToDouble(Convert.ToString(((Convert.ToDateTime(subScript)) - DateTime.Now).TotalDays)));
string sSubLeft = Convert.ToString(dSubLeft);
main.daysLeftLabel.Text = "Expires: " + sSubLeft + " Days";
}
答案 0 :(得分:2)
使用文件时,您经常会收到尾随空格或换行符。尝试修剪字符串,然后将其与Lifetime
进行比较:
subScript = subScript.Trim().Trim(Environment.NewLine.ToCharArray());
另一个(不太可能)问题可能在于比较本身。在C#中,区分大小写的比较。因此,如果您将lifetime
与Lifetime
进行比较,则认为它们不相等。您应该使用不区分大小写的比较:
if(string.Equals(subScript, "Lifetime", StringComparer.OrdinalIgnoreCase))
OR
if(subScript.ToLower() == "lifetime")
您还可以使用subScript
检查您从文件中获取的DateTime.TryParse
是否为有效日期。
string subScript = File.ReadAllText(Path.GetTempPath() + txtUsername.Text + ".txt");
Main main = new Main();
double dSubLeft;
main.dateLabel.Text = subScript;
DateTime subScriptDate;
if(!DateTime.TryParse(subScript, out subScriptDate))
{
main.daysLeftLabel.Text = "Expires: Never";
}
else //Goes here and throws error saying subScript is not valid DateTime
{
dSubLeft = Math.Round(Convert.ToDouble(Convert.ToString((subScriptDate - DateTime.Now).TotalDays)));
string sSubLeft = Convert.ToString(dSubLeft);
main.daysLeftLabel.Text = "Expires: " + sSubLeft + " Days";
}
答案 1 :(得分:0)
我认为这是因为main是C#中程序的起点,如果你不希望它重置程序应该从哪里开始,那就另外创建一个方法名
这只是我的猜测,在代码的开头创建一个断点,并查看从代码中的每一行获得的信息
答案 2 :(得分:0)
几乎可以肯定,字符串的实际内容实际上并不是字符串“Lifetime”。可能是因为两边都有白色空间。尝试修剪。
相关编辑:
if (subscript.Trim() == "Lifetime")
{
main.daysLeftLabel.Text = "Expires: Never";
}
else // don't retest for the opposite condition
{
...
正如你所看到的,这个东西非常脆弱,因为字符串可能仍然是许多不是有效DateTime
的东西。闻起来像家庭作业,但你去... ...
答案 3 :(得分:0)
我认为你应该使用
if(string.Equals(subScript, "Lifetime", StringComparer.OrdinalIgnoreCase))
{
//statement
}
else
{
//statement
}