C#使用会话值,如果不是null快捷方式

时间:2013-01-25 15:49:47

标签: c#

在编写以下代码的C#中是否存在较短的方式:

var token = Session["token"];
if(token != null)
{
    if((String)token != "")
    {
        var a = (String)token;
    }
}

对于可能为空且没有导致异常的对象,是否有等效的string.IsNullOrEmpty(Object.ToString())

编辑:显示实际代码,交换“令牌”和“a”的变量名称。 var a实际上是一个属性引用,但为了在将来的情况下有用,请将其保留为var a。

7 个答案:

答案 0 :(得分:10)

如果您删除了冗余,那么您的代码开始时会更简单:

var value = Session["value"];
if (value != null)
{
    string text = value.ToString();
    if (text != "")
    {
        // Use text
    }
}

这已经表示了每次逻辑操作一次,这很好。

或者,您可以使用null-coalescing运算符:

var text = (Session["value"] ?? "").ToString();
if (text != "")
{
    ...
}

答案 1 :(得分:3)

这个怎么样:

var candidate = Convert.ToString(Session["var"]);
if(candidate.Length > 0){
     DoSomething(candidate);

}

Convert.ToString(Object)将处理转化,无论其实际类型如何,如果值为string.Empty,则返回null

答案 2 :(得分:2)

object myObj = Session["value"];
if (myObj != null && myObj.ToString() != string.Empty)
string myStr = myObj.ToString();

答案 3 :(得分:2)

使用as转换为string以避免例外:

string text = Session["value"] as string;

if(!string.IsNullOrEmpty(text))
{
    var a = text;
}

答案 4 :(得分:1)

也许:

string value = Session["value"] as string ?? "";
// no need for an `if`

答案 5 :(得分:1)

你试过吗?

if(!string.IsNullOrEmpty(Session["Value"]) as string)
{
      //do something
}

或者

var a = string.IsNullOrEmpty(Session["value"] as string) ? "" : Session["value"].ToString();

答案 6 :(得分:0)

<子> 就个人而言,我会使用带有括号的?? null合并运算符@ JonSkeet的答案,在调用ToString之前将语句解析为字符串 - 单行。

另一个毫无意义的选择:您可以将其压缩为扩展方法,因为扩展方法调用可以处理null“targets”:

public static class ObjectExtensions
{
    public static string SafeToString(this object o)
    {
        if (o != null)
        {
            return o.ToString();
        }

        return "";
    } 
}

然后你可以打电话:

string a = Session["value"].SafeToString();

if (string.IsNullOrEmpty(a))
{
    // Handle null or empty strings.
}

我不确定自己是否会自己这样做,因为看起来奇怪的是null项方法调用有效 - 除非那个人记得如何编译扩展方法。

此外,如果您对命名空间不严格,扩展object可能会真正污染对象的类型接口。