C# 使用会话值(如果不是空快捷方式)



C# 中是否有一种更短的方法来编写以下代码:

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

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

编辑:显示实际代码,将变量名称替换为"token"和"a"。 var a 实际上是一个属性引用,但为了在将来的情况下有所帮助,保留为 var a。

好吧,如果你删除冗余,你的代码会更容易开始:

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

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

或者,您可以使用空合并运算符:

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

这个呢:

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

Convert.ToString(Object) 将处理转换,无论它的实际类型是什么,同时返回string.Empty如果值null

使用 as 强制转换为 string 以避免异常:

string text = Session["value"] as string;
if(!string.IsNullOrEmpty(text))
{
    var a = text;
}
object myObj = Session["value"];
if (myObj != null && myObj.ToString() != string.Empty)
string myStr = myObj.ToString();

也许:

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

你试过吗?

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

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

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

只是另一个毫无意义的选择:您可以将其压缩为扩展方法,因为扩展方法调用适用于空"目标":

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.
}

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

此外,如果您不严格使用命名空间,扩展object确实会污染对象的类型接口。

最新更新