C# 将richtextbox(TimeSpan)的内容转换为Double或Float

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方法

我是新来的,我希望我在正确的地方。 有人能帮我吗? 我的程序中有3个richTextBox 第一个是(日期时间格式):日期开始 2sd格式是(日期时间格式):日期结束 第三个是(Timespan格式):从richTextBox1到下一个日期(richTextBox2)的剩余天数。 我想要的是如果richTextBox3 格式不正确的数据将导致此方法引发异常。因为您正试图解析直接用户输入,所以应该将其包装在try-catch块中。或者,如果您关心性能,可以使用
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正在检查
(RemainingDays
dateOfStart
是一个
StreamReader
。没有重载
DateTime。解析
时需要一个
StreamReader
作为输入。也许你应该用
richTextBox1.Text
替换它。为什么要使用StreamReader?如果需要,请将其更改为
)(remainingDays.TotalDays在上面的示例中,
dateOfStart
dateOfEnd
是同一件事(它们都在读取存储在
TextFilePath
的文件).
dateOfStart
是一个
StreamReader
。没有重载
DateTime。解析
时将
StreamReader
作为输入。也许您应该