[英]C# program crash
感謝大家幫助我解決1位數字和31個以上的問題。
現在,最后一件事...如果文本框包含非數字字符或根本沒有字符,則程序將崩潰。
這是整個代碼:
private void generate_Click(object sender, EventArgs e)
{
int val = 0;
if (Int32.TryParse(dd.Text, out val))
{
if (val > 31) return;
else if (dd.Text.Length <= 1)
return;
}
if (Int32.TryParse(MM.Text, out val))
{
if (val > 31) return;
else if (MM.Text.Length <= 1)
return;
}
if (Int32.TryParse(hh.Text, out val))
{
if (val > 31) return;
else if (hh.Text.Length <= 1)
return;
}
if (Int32.TryParse(M.Text, out val))
{
if (val > 31) return;
else if (M.Text.Length <= 1)
return;
}
if (Int32.TryParse(ss.Text, out val))
{
if (val > 31) return;
else if (ss.Text.Length <= 1)
return;
}
String dateString = yyyy.Text + dd.Text + MM.Text + hh.Text + M.Text + ss.Text;
DateTime timestamp = DateTime.ParseExact(dateString, "yyyyddMMhhmmss", CultureInfo.CurrentCulture);
long ticks = timestamp.Ticks;
long microseconds = ticks / 10;
convertedText.Text = microseconds.ToString("X");
}
我該放些什么? 我知道這有點混亂...但是它可以正常工作,並且是我的第一個C#應用程序:P再次感謝!
如果您要在日期未解析的情況下返回,則可以跳過所有驗證代碼,而只需使用TryParseExact
:
private void generate_Click(object sender, EventArgs e)
{
String dateString = yyyy.Text + dd.Text + MM.Text + hh.Text + M.Text + ss.Text;
DateTime timestamp
if (!DateTime.TryParseExact(dateString, "yyyyddMMhhmmss", null,
DateTimeStyles.None, out timestamp ))
return;
long ticks = timestamp.Ticks;
long microseconds = ticks / 10;
convertedText.Text = microseconds.ToString("X");
}
對於初學者,將代碼包裝在try catch塊中。 這將防止異常自動使程序崩潰。 您可以捕獲異常並通知用戶輸入有問題。
然后,您可以執行以下操作:
catch
{
MessageBox.Show("Please enter numbers only.");
}
實際上,在生產應用中,您需要做更多的事情,例如捕獲特定類型的錯誤。 但是對於開始,這將很好。
這樣可以解決您的特定問題嗎? 您正在執行TryParsing,然后驗證大於31或小於1的整數,但在TryParse失敗時不進行處理。
private void generate_Click(object sender, EventArgs e)
{
int val = 0;
if (Int32.TryParse(dd.Text, out val))
{
if (val > 31) return;
else if (dd.Text.Length <= 1)
return;
}
else
{
return;
}
if (Int32.TryParse(MM.Text, out val))
{
if (val > 31) return;
else if (MM.Text.Length <= 1)
return;
}
else
{
return;
}
if (Int32.TryParse(hh.Text, out val))
{
if (val > 31) return;
else if (hh.Text.Length <= 1)
return;
}
else
{
return;
}
if (Int32.TryParse(M.Text, out val))
{
if (val > 31) return;
else if (M.Text.Length <= 1)
return;
}
else
{
return;
}
if (Int32.TryParse(ss.Text, out val))
{
if (val > 31) return;
else if (ss.Text.Length <= 1)
return;
}
else
{
return;
}
String dateString = yyyy.Text + dd.Text + MM.Text + hh.Text + M.Text + ss.Text;
DateTime timestamp = DateTime.ParseExact(dateString, "yyyyddMMhhmmss", CultureInfo.CurrentCulture);
long ticks = timestamp.Ticks;
long microseconds = ticks / 10;
convertedText.Text = microseconds.ToString("X");
}
如果dateString
格式不正確,它將在ParseExact
崩潰。
請改用TryParseExact
。
我猜你的ParseExact
崩潰了……但是我不太確定……將所有內容都包裹在一個try catch或幾個try catch中。 然后,您可以查看發生了什么並進行更正...
就像是:
try{
//Parse something...
}catch(Exception ex)
{
throw ex; //I usually put a break point here when I'm debugging...
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.