Asp.NET返回empy List <object> C#</object>

时间:2013-08-12 15:00:11

标签: c# list collections null return

在我的ASP.NET经典WebForms应用程序中,我有一个类,它返回一个Role对象列表,用于映射数据库中用户的角色。

我写了这个静态类:

public static class RoleHelper
{
    public static List<RoleValue> getRoles()
    {
        List<RoleValue> myroles = null;
        string connectionString = ConfigurationManager.ConnectionStrings["SQLConnStr"].ConnectionString;
        if (!string.IsNullOrWhiteSpace(connectionString))
        {
            using (SqlConnection dbconn = new SqlConnection(connectionString))
            {
                dbconn.Open();
                SqlDataAdapter cmd = new SqlDataAdapter(" SELECT groupID,Name FROM Gruppi", dbconn);
                cmd.SelectCommand.CommandType = CommandType.Text;
                DataSet ds = new DataSet();
                cmd.Fill(ds);
                if (ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0)
                {
                    myroles = new List<RoleValue>();

                    foreach (DataRow row in ds.Tables[0].Rows)
                    {
                        RoleValue myrole = new RoleValue();
                        myrole.roleID = (int)row["groupID"]; ;
                        myrole.roleName = (string)row["Name"]; ;
                        myroles.Add(myrole);
                    }
                }
                dbconn.Close();
            }
        }
        return myroles;
    }
}

起初我写道:

List(RoleValue) myroles = null; 

这是错的吗?

在调用函数中,我检查if (rolesList.Count > 0)但是我应该检查if(!rolesList is null)但是列表不允许为空?

5 个答案:

答案 0 :(得分:4)

将列表初始化为null并没有错,但它以这种方式被广泛使用:

List<RoleValue> myroles = new List<RoleValue>();

然后您将返回列表,调用者将检查列表的长度以查看是否为空,如下所示:

List<RoleValue> listOfRoles = getRoles();

if(listOfRoles.Count == 0)
{
    // Report message to user if having no roles is worthy of a notification
}

返回列表实例与null的优点是,用户将执行的大多数操作都可以在不检查null的情况下工作,例如数据绑定和迭代列表。

答案 1 :(得分:1)

我认为在正常情况下数据库访问有效,因此您将到达

myroles = new  List<RoleValue>();

因此,您可以在顶部创建此实例,而不是

List<RoleValue> myroles = null;

优点:调用者可以遍历所有角色,如果集合为空,则不会创建任何输出。

答案 2 :(得分:0)

按照惯例,您应该将其初始化为空列表,而不是null,并检查它是否包含任何项目,而不是在其他位置查看它是否为null。这样可以防止需要使用类型来检查所有代码以检查null,大多数操作正常工作(即无效),如果没有项目,例如foreach

答案 3 :(得分:0)

返回包含0个对象并返回null的列表都是完全有效的。您需要关注的是调用者对该方法的期望。他们应该收到空名单吗?这样他们就可以避免首先进行空检查。

答案 4 :(得分:0)

一般情况下,它可能为空。但我认为你的if子句总是正确的或者是......这样就行了myroles = new List();然后它不是空的。更好地要求.Count属性