我见过人们编写如下例子的代码,
foreach (DataRow row in GetStudentData(studentID).Rows)
{
//do something
}
您能否直接调用函数(GetStudentData函数)而不是将其赋值给变量然后使用它,是否可以接受这种方法?
答案 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并不关心。