C# 将richtextbox(TimeSpan)的内容转换为Double或Float
我是新来的,我希望我在正确的地方。 有人能帮我吗? 我的程序中有3个richTextBox 第一个是(日期时间格式):日期开始 2sd格式是(日期时间格式):日期结束 第三个是(Timespan格式):从richTextBox1到下一个日期(richTextBox2)的剩余天数。 我想要的是如果richTextBox3 格式不正确的数据将导致此方法引发异常。因为您正试图解析直接用户输入,所以应该将其包装在try-catch块中。或者,如果您关心性能,可以使用C# 将richtextbox(TimeSpan)的内容转换为Double或Float,c#,datetime,double,richtextbox,timespan,C#,Datetime,Double,Richtextbox,Timespan,我是新来的,我希望我在正确的地方。 有人能帮我吗? 我的程序中有3个richTextBox 第一个是(日期时间格式):日期开始 2sd格式是(日期时间格式):日期结束 第三个是(Timespan格式):从richTextBox1到下一个日期(richTextBox2)的剩余天数。 我想要的是如果richTextBox3 格式不正确的数据将导致此方法引发异常。因为您正试图解析直接用户输入,所以应该将其包装在try-catch块中。或者,如果您关心性能,可以使用TryParse。TryParse方法
TryParse
。TryParse
方法不会引发异常
格式不正确的数据将导致此方法引发异常。因为您正试图解析直接用户输入,所以应该将其包装在try-catch块中。或者,如果您关心性能,可以使用
TryParse
。TryParse
方法不会抛出异常。您可以做一些事情来实现这一点
首先,您不需要直接使用StreamReader
对象,您可以使用静态File.ReadAllText()
方法将文件内容读入字符串变量。这将打开文件,读取文本,返回文本,然后为您关闭文件
richTextBox1.Text = File.ReadAllText(startDateFilePath);
richTextBox2.Text = File.ReadAllText(endDateFilePath);
接下来,在设置DateTime
变量时,您希望传递字符串值,而不是StreamReader
对象。因为我们已经在RichTextBox
对象中存储了字符串,所以我们可以使用这些:
// Note that `Parse` will throw an exception if the text is not a valid date
// Use `TryParse` instead if this is a possibility,
// or use a `try/catch` block and catch the FormatException
DateTime dateStarting = DateTime.Parse(richTextBox1.Text);
DateTime dateEnding = DateTime.Parse(richTextBox2.Text);
然后,在执行减法运算时,您可以访问TimeSpan
的TotalDays
属性以获取表示的天数,并将richTextBox3.Text
设置为该值:
double remainingDays = (dateEnding - dateStarting).TotalDays;
richTextBox3.Text = remainingDays.ToString();
if (remainingDays <= 0)
{
MessageBox.Show("Warning !!!!!");
}
double remainingDays=(dateend-datestart).TotalDays;
richTextBox3.Text=remainingDays.ToString();
如果(剩余天数有一些事情你可以做,使这项工作
首先,您不需要直接使用StreamReader
对象,您可以使用静态File.ReadAllText()
方法将文件内容读入字符串变量。这将打开文件,读取文本,返回文本,然后为您关闭文件
richTextBox1.Text = File.ReadAllText(startDateFilePath);
richTextBox2.Text = File.ReadAllText(endDateFilePath);
接下来,在设置DateTime
变量时,您希望将字符串值传递给它,而不是StreamReader
对象。因为我们已经将字符串存储在RichTextBox
对象中,所以我们可以使用这些:
// Note that `Parse` will throw an exception if the text is not a valid date
// Use `TryParse` instead if this is a possibility,
// or use a `try/catch` block and catch the FormatException
DateTime dateStarting = DateTime.Parse(richTextBox1.Text);
DateTime dateEnding = DateTime.Parse(richTextBox2.Text);
然后,在执行减法运算时,您可以访问TimeSpan
的TotalDays
属性以获取表示的天数,并将richTextBox3.Text
设置为该值:
double remainingDays = (dateEnding - dateStarting).TotalDays;
richTextBox3.Text = remainingDays.ToString();
if (remainingDays <= 0)
{
MessageBox.Show("Warning !!!!!");
}
double remainingDays=(dateend-datestart).TotalDays;
richTextBox3.Text=remainingDays.ToString();
如果(剩余天数)在try-catch中包装解析比仅使用TryParse()
慢得多。您通常应该选择TryParse()
A.我的答案没有错,这是一个偏好问题。B.性能差异可以忽略。C.Try parse要求您删除并使用out变量。此外,由于OP还没有这样做,因此执行TryParse所需的额外开销几乎等于效率损失。用户应在中验证用户如果发生意外情况,则放置并抛出异常。抛出异常是您可以做的最有损性能的事情之一,TryParse()
比Parse()
快约36倍。36倍的增长“可以忽略不计”?原因是您不想使用out参数?同意A点。
,绝对不是投反对票的理由(请参阅)。但性能不是这里的问题。不使用try/catch
进行输入验证是另一个最佳做法首选项。抱歉,我在撰写原始评论时分心了。否决投票的最大原因是因为此答案似乎掩盖了OPs代码错误。OP正在检查(RemainingDays在try-catch中包装解析要比只使用TryParse()
慢得多。您通常应该喜欢TryParse()
A.我的答案没有错,这是一个偏好问题。B.性能差异可以忽略。C.Try parse要求您删除并使用out变量。此外,由于OP还没有这样做,因此执行TryParse所需的额外开销几乎等于效率损失。用户应在中验证用户如果发生意外情况,则放置并抛出异常。抛出异常是您可以做的最有损性能的事情之一,TryParse()
比Parse()
快约36倍。36倍的增长“可以忽略不计”?原因是您不想使用out参数?同意A点。
,绝对不是投反对票的理由(请参阅)。但性能不是这里的问题。不使用try/catch
进行输入验证是另一个最佳做法首选项。抱歉,我在撰写原始评论时分心了。否决投票的最大原因是因为此答案似乎掩盖了OPs代码错误。OP正在检查(RemainingDaysdateOfStart
是一个StreamReader
。没有重载DateTime。解析时需要一个StreamReader
作为输入。也许你应该用richTextBox1.Text
替换它。为什么要使用StreamReader?如果需要,请将其更改为)(remainingDays.TotalDays在上面的示例中,dateOfStart
和dateOfEnd
是同一件事(它们都在读取存储在TextFilePath
的文件).dateOfStart
是一个StreamReader
。没有重载DateTime。解析时将StreamReader
作为输入。也许您应该