0

我对此进行了很多不同的研究,据我发现,字符串不存在 tryparse 和 parse 。所以我正在为此寻找替代方案。

我有 7 个不同的文本框,当单击按钮时,我需要它来检查文本框(变量是字符串),如果文本框为空,我希望它完全跳过它。如果文本框中有一个字符串,我希望它把它添加到一个列表中。它不一定是一个列表,我更喜欢一个列表,但我不会挑剔!几乎是最好的方法。我还有其他 7 个浮点值复选框,这就是我所拥有的:

List<float> ListGrade = new List<float>();

float LG;

if (float.TryParse(txtGrade1.Text, out LG))
    ListGrade.Add(LG);

if (float.TryParse(txtGrade2.Text, out LG))
    ListGrade.Add(LG);

if (float.TryParse(txtGrade3.Text, out LG))
    ListGrade.Add(LG);

if (float.TryParse(txtGrade4.Text, out LG))
    ListGrade.Add(LG);

if (float.TryParse(txtGrade5.Text, out LG))
    ListGrade.Add(LG);

if (float.TryParse(txtGrade6.Text, out LG))
    ListGrade.Add(LG);

if (float.TryParse(txtGrade7.Text, out LG))
    ListGrade.Add(LG);

这很完美,但我想不出一个字符串。我考虑过使用 nullorwhitespace,但我不确定如何完全跳过文本框。我以前从未使用过列表,这是第一次,我还没有完全理解 out 关键字。每次我进行搜索时,除了说 if (textbox1.Text == "") 之外什么都没有出现,但这并没有显示如何跳过文本框。

此外,使用上面的代码和另一个看起来相同的列表,除了文本框相同且名称不同,我得到一个错误,说我在上面代码末尾使用此代码时使用了未声明的变量:

if (ListGrades.Count > 0 && ListCredits.Count > 0)
    AverageGrade = ListGrades.Sum() / ListCredits.Sum();

我必须在上面添加一个 else 语句吗?当我这样做时,它会起作用,但我不确定我可以添加什么,因此最终结果不会被搞砸。

如果你们需要更多信息,请告诉我。我正在努力学习和研究,但我很难过!

多谢你们!

4

5 回答 5

1

您可以通过执行以下操作跳过向列表添加值:

if (!string.IsNullOrWhiteSpace(txtbox.Text))
    // add to the list here

这是关于out 关键字的信息

于 2013-09-08T05:31:23.730 回答
1

如果文本框为空,我希望它完全跳过它

你可以这样做

if(!string.isNullorEmpty(txtbox.Text))
{
   //do what you want here
}

或者如果您希望不存在任何空格,如制表符、换行符等,您应该使用此功能

if(!string.isNullorWhiteSpace(txtbox.Text))
{
   //do what you want here
}

我不完全理解 out 关键字

out 关键字导致参数通过引用传递。这类似于 ref 关键字,只是 ref 要求在传递变量之前对其进行初始化。要使用 out 参数,方法定义和调用方法都必须显式使用 out 关键字

我收到一条错误消息,提示我正在使用未声明的变量

显示ListCredits. 并且ListGrades应该是ListGrade。注意最后没有s

于 2013-09-08T05:36:07.633 回答
1

使用 LINQ:

var textboxes = new [] {
       txtCredit1, txtCredit2, txtCredit3, txtCredit4, 
       txtCredit5, txtCredit6, txtCredit7
};
var ListCredits = textboxes.Select(tb => tb.Text)
                            .Where(txt => !String.IsNullOrEmpty(txt))
                            .ToList();
于 2013-09-08T05:46:09.567 回答
0

您可以依靠条件句的捷径;如果 AND 条件的第一部分失败,则不会执行第二部分。这允许您跳过文本框。

List<float> grades = new List<float>();

float grade;

if (!string.IsNullOrWhiteSpace(txtGrade1.Text) && float.TryParse(txtGrade1.Text, out grade))
    grades.Add(grade);

if (!string.IsNullOrWhiteSpace(txtGrade2.Text) && float.TryParse(txtGrade2.Text, out grade))
    grades.Add(grade);

if (!string.IsNullOrWhiteSpace(txtGrade3.Text) && float.TryParse(txtGrade3.Text, out grade))
    grades.Add(grade);

...

if (grades.Count > 0 && credits.Count > 0)
     averageGrade = grades.Sum() / credits.Sum();
于 2013-09-08T05:49:24.277 回答
0

您可以通过以下方式做到这一点:

1. if (!string.IsNullOrWhiteSpace(txtbox.Text)){add to list}
2. if(textbox.text!="" && textbox.text!=null){add to list}

谢谢。

于 2013-09-08T06:14:19.300 回答