我可以在C#中优化检查多个空值吗?

时间:2011-12-09 14:19:12

标签: c#

我有以下代码:

if (Session["CurrentUrl"] != null & Session["CurrentHost"] != null)

我在很多地方使用它。我想知道是否有人能想出一种优化C#代码的方法,只是为了让事情更加清晰。

6 个答案:

答案 0 :(得分:8)

这似乎是extension method的主要候选人:

public static class SessionExtensions
{
    public static bool HasHostAndUrl(this HttpSessionState session)
    {
        return session["CurrentUrl"] != null && session["CurrentHost"] != null;
    }
}

然后:

if (Session.HasHostAndUrl()) { /* ... */ }

答案 1 :(得分:5)

if (HostAndUrlExist()) {
    ...
}

public boolean HostAndUrlExist() {
    return Session["CurrentUrl"] != null && Session["CurrentHost"] != null
}

答案 2 :(得分:2)

制作返回真或假的方法

答案 3 :(得分:1)

如果您经常使用会话变量组,请考虑将它们存储为对象而不是一组基本类型。

答案 4 :(得分:1)

您可以创建一个带有一个或多个字符串的方法,如下所示:

public boolean SessionObjectsPresent(params string[] names) {
    foreach (var name in names) {
        if (Session[name] == null) return false
    }
    return true;
}


if (SessionObjectsPresent("CurrentHost", "CurrentUrl")) {
    // ...
}

当您需要为其他事情测试会话时,这种方法的好处变得明显:

if (SessionObjectsPresent("CurrentUser", "LastEditTime")) {
    // ...
}

答案 5 :(得分:0)

几种改进方法,例如抽象具有有意义名称的方法,或者提取接口ISession以使其更具单元可测试性。