在编写以下代码的C#中是否存在较短的方式:
var token = Session["token"];
if(token != null)
{
if((String)token != "")
{
var a = (String)token;
}
}
对于可能为空且没有导致异常的对象,是否有等效的string.IsNullOrEmpty(Object.ToString())
?
编辑:显示实际代码,交换“令牌”和“a”的变量名称。 var a实际上是一个属性引用,但为了在将来的情况下有用,请将其保留为var a。
答案 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
可能会真正污染对象的类型接口。