1

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

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

是否有string.IsNullOrEmpty(Object.ToString())可能为 null 而不会导致异常的对象的等价物?

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

4

7 回答 7

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 != "")
{
    ...
}
于 2013-01-25T15:51:54.760 回答
3

那这个呢:

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

}

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

于 2013-01-25T15:59:24.690 回答
2
object myObj = Session["value"];
if (myObj != null && myObj.ToString() != string.Empty)
string myStr = myObj.ToString();
于 2013-01-25T15:51:03.667 回答
2

使用asto cast tostring来避免异常:

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

if(!string.IsNullOrEmpty(text))
{
    var a = text;
}
于 2013-01-25T15:59:21.523 回答
1

也许:

string value = Session["value"] as string ?? "";
// no need for an `if`
于 2013-01-25T15:53:36.303 回答
1

你有没有尝试过?

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

或者

var a = string.IsNullOrEmpty(Session["value"] as string) ? "" : Session["value"].ToString();
于 2013-01-25T15:58:13.533 回答
0

就我个人而言,我会使用@JonSkeet 的答案,使用??带有括号的空合并运算符在调用之前将语句解析为字符串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.
}

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

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

于 2013-01-25T16:05:35.663 回答