2017-07-15 37 views
0

最近,我在應用程序中添加了一個函數,該函數從下載的文件中讀取日期,並查找當前日期與文件日期之間的差異。完成後,它會顯示在我的一個論壇的標籤中。即使進行了視覺檢查,字符串比較也失敗

存在一個例外:如果文件中的字符串等於「Lifetime」,則不應將其作爲日期處理並遵循備用邏輯。但是,當我嘗試檢查字符串是否爲「Lifetime」時,即使字符串=「Lifetime」,它也不會返回true。

編輯:我在Nisarg的幫助下修復了FormatException。現在,我的標籤並沒有改變。這就是問題。

編輯2:我覺得很蠢。我發現我在一個函數中啓動了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

這是否行**串標= File.ReadAllText(Path.GetTempPath()+ txtUsername.Text +」。txt「); **在變量中填充字符串數據 –

+0

'Convert.ToDateTime()'需要一個看起來像日期的字符串(如7/14/2017」)。您正在發送無法轉換的字符串「Lifetime」。 – Kevin

+0

@凱文是的,但我檢查,以確保它不等於終身。不應該阻止它? – elite

回答

0

我想這是因爲主要是程序的C#中的起點,再拍方法名,如果你鴕鳥政策想要重置從該程序是應該的事情從

那只是我的猜測,使一個斷點在你的代碼的開頭,並通過你們從各行得到什麼信息代碼

0

幾乎可以肯定的檢查開始,該字符串的實際內容不其實字符串「Lifetime」。可能是因爲任何一方都有空白。嘗試修剪。

相關編輯:

if (subscript.Trim() == "Lifetime") 
{ 
    main.daysLeftLabel.Text = "Expires: Never"; 
} 
else // don't retest for the opposite condition 
{ 
... 

正如你所看到的,這一點是非常脆弱的,因爲字符串還可能有許多事情是不是一個有效DateTime。聞起來像功課,但你去...

2

在使用文件時,你經常會得到尾隨空格或換行符。試試看比較Lifetime前修剪字符串:

subScript = subScript.Trim().Trim(Environment.NewLine.ToCharArray()); 

另一個(不太可能),問題可能是與比較本身。在C#中區分大小寫的比較。因此,如果您將lifetimeLifetime進行比較,則認爲它們不相等。你還是使用不區分大小寫的比較:

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"; 
} 
+0

我將文本文件設置爲Lifetime。我這樣做是因爲我知道這將是區分大小寫的,並且會在稍後讓我感到困擾。至於多餘的角色去...我已經嘗試過,並沒有改變。 – elite

+0

好的,也許你可以嘗試更好的條件。我會爲DateTime.TryParse添加一個片段,而不是字符串比較。看看是否有幫助。 – Nisarg

+0

這固定了FormatException,但字符串仍顯示爲空白。 – elite

0

我認爲你應該使用

if(string.Equals(subScript, "Lifetime", StringComparer.OrdinalIgnoreCase)) 
{ 
//statement 

} 
else 
{ 
//statement 

}