如何检查可枚举的长度?

时间:2014-02-26 07:15:17

标签: c# asp.net

我有以下代码:

       var questionStatuses =
           (
               from questionStatus in this._questionStatusService.GetQuestionStatuses()
               select new
               {
                   id = questionStatus.QuestionStatusId,
                   status = questionStatus.Status
               }
           );
        if (questionStatuses == null || questionStatuses.length() == 0)
        {
            return Request.CreateResponse(HttpStatusCode.NotFound);
        }
        else
        {
            var response = Request.CreateResponse(HttpStatusCode.OK, questionStatuses);
            return response;
        }

questionStatuses是一个IEnumrable。

我如何检查以确保其内容不仅仅是一个空数组?我试过.length()但它给出了一个错误。这也是WebAPI控制器的一部分,所以可以返回IEnumerable或者我应该将它放入列表中,如果是这样,我该怎么做?

6 个答案:

答案 0 :(得分:3)

问题状态是IEnumerable。我如何检查以确保其内容不仅仅是一个空数组?

只需使用Any

即可
questionStatuses.Any()

答案 1 :(得分:2)

使用.Count()方法代替.length()

  if (questionStatuses == null || questionStatuses.Count() == 0)
    {
        return Request.CreateResponse(HttpStatusCode.NotFound);
    }
    else
    {
        var response = Request.CreateResponse(HttpStatusCode.OK, questionStatuses);
        return response;
    }

答案 2 :(得分:2)

您可以使用.Count()中的System.Linq来获取长度。但是,您通常不希望这样做,因为它会强制实现整个可枚举。 (另请注意,并非所有枚举都支持多次枚举)

如果您必须转换为列表,请查看.ToList()扩展方法。

如果给你一个

,通常你应该返回IEnumerable

另见SO上的其他答案(例如IEnumerable doesn't have a Count method)。我再次建议你首先考虑一下你是否真的需要计算。

最后看看其他答案,了解如何使用.Any()检查枚举是否为空(例如Recommended way to check if a sequence is empty

答案 3 :(得分:1)

使用计数

questionStatuses.count()

答案 4 :(得分:1)

使用count()

尝试使用此代码,而不是代码

var questionStatuses =
           (
               from questionStatus in this._questionStatusService.GetQuestionStatuses()
               select new
               {
                   id = questionStatus.QuestionStatusId,
                   status = questionStatus.Status
               }
           );
var response =(questionStatuses==null || questionStatuses.count() == 0) ? Request.CreateResponse(HttpStatusCode.NotFound):Request.CreateResponse(HttpStatusCode.OK, questionStatuses);
return response ;

<强>更新

试试这个

 var questionStatuses =
               (
                   from questionStatus in this._questionStatusService.GetQuestionStatuses()
                   select new
                   {
                       id = questionStatus.QuestionStatusId,
                       status = questionStatus.Status
                   }
               );
    var response = !questionStatuses.Any() ? Request.CreateResponse(HttpStatusCode.NotFound):Request.CreateResponse(HttpStatusCode.OK, questionStatuses);
    return response ;

答案 5 :(得分:0)

由于您只想知道可枚举是否为空,您可以这样做:

if (questionStatuses == null || !(questionStatuses.GetEnumerator().MoveNext())){

这不需要枚举完整的IEnumerable - 否则可能代价高昂。