直接在for循环中调用函数

时间:2016-10-25 06:01:48

标签: c#

我见过人们编写如下例子的代码,

foreach (DataRow row in GetStudentData(studentID).Rows)
{
    //do something
}

您能否直接调用函数(GetStudentData函数)而不是将其赋值给变量然后使用它,是否可以接受这种方法?

1 个答案:

答案 0 :(得分:1)

从技术上讲,并非禁止这样做,但请考虑以下问题:

  • 如评论中已经提到的,如果你对这部分代码有问题,你想看看该方法返回什么 - 这里它将是一个很难的主题,所以存储结果首先,然后列举它会更方便

  • 您可能想要在结果中获取.Rows之前检查结果是否为空?这里可能是不可能的(从C#6开始,它已经可以使用?。操作员)

  • 一般来说,任何关于方法结果的条件逻辑都是一个难题。

  • 这实际上可能更像是个人意见,但在foreach语句中链接连续调用看起来很丑陋并且使这些代码的可读性降低。所以,只要它是GetStudents(studentID).Rows,也许它不是那么糟糕。但是,随着人们倾向于采用更简单的方式,一旦你做出了良好的做法,我就可以想象foreach(student in GetStudents(studentID).Rows.FirstOrDefault(stud => stud.GetFirstName()...

  • 这样的陈述

所以我想说,还有更多'没有'而不是'是'。

有趣的是,IL为这段代码和相应的

生成了
var students = GetStudentData(studentID);
foreach (DataRow row in students.Rows)
{
       //do something
}

应该更多或更少,所以在一天结束时,CLR并不关心。