并非所有代码路径都返回值

时间:2012-07-03 07:37:10

标签: c# asp.net linq-to-sql

我正在进行此Linq To SQL查询,该查询从database获取客户类别.CustCategory将已定义。这是查询。

public IList<string> GetAccountType()
        {
            using (var db = new DataClasses1DataContext())
            {
                var  acctype = db.mem_types.Select(account=>account.CustCategory).Distinct().ToList();
                if (acctype != null)
                {
                    return acctype;
                }
            }

        }

目前我收到错误Not all code paths return a value.如果我总是确定数据库中有值,那么我是否需要检查null,如果我需要检查{{1}那么我该如何处理呢。 谁能帮我这个。 欢迎任何建议。

5 个答案:

答案 0 :(得分:8)

由于Enumerable.ToList永远不会返回null(请参阅the documentation返回值部分),因此您可以安全地删除if

编辑:请注意,无论您的数据库包含什么,acctype 永远不会为空:

  • 如果数据库中未找到任何值,则返回值将为空列表(与null不同)。
  • 如果找到一条记录且其值为null,则返回值将为一个有效列表,其中一个条目的值为null。不过,列表本身是不是 null

答案 1 :(得分:4)

这与LINQ to SQL无关,方法GetAccountType()必须返回IList<string>。您应该返回return acctype;,然后使用Any()稍后检查此返回的列表,例如:

if(GetAccountType.Any()){
     //not empty
}

答案 2 :(得分:4)

对于一个相当干净和可读的解决方案,这样的事情怎么样?:

注意,更新:删除了检查null,因为它显然没有任何效果。)

public IList<string> GetAccountType()
{
        var acctype = new List<string>();
        using (var db = new DataClasses1DataContext())
        {
            acctype = db.mem_types.Select(
                         account=>account.CustCategory).Distinct().ToList();
        }

        return acctype;
    }

答案 3 :(得分:3)

如果出现以下情况:

if (acctype != null)

是空的吗?您的方法应该是return

你需要返回一些东西

答案 4 :(得分:1)

您需要从函数中返回一个值:

    public IList<string> GetAccountType()
            {
                using (var db = new DataClasses1DataContext())
                {
                    var  acctype = db.mem_types.Select(account=>account.CustCategory).Distinct().ToList();
                    if (acctype != null)
                    {
                        return acctype;
                    }
                }
                return acctype;
            }