C#如果不为空,则使用会话值
在C语言中,是否有一种编写以下代码的较短方法:C#如果不为空,则使用会话值,c#,C#,在C语言中,是否有一种编写以下代码的较短方法: var token = Session["token"]; if(token != null) { if((String)token != "") { var a = (String)token; } } 对于可能为null而不会导致异常的对象,是否存在与string.IsNullOrEmpty(Object.ToString())等效的值 编辑:显示实际代码,将变量名替换为“token”和“a”。var
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。如果您删除了冗余,那么您的代码开始时会简单得多:
object myObj = Session["value"];
if (myObj != null && myObj.ToString() != string.Empty)
string myStr = myObj.ToString();
var value = Session["value"];
if (value != null)
{
string text = value.ToString();
if (text != "")
{
// Use text
}
}
这已经表示了每个逻辑操作一次,这很好
或者,您可以使用空合并运算符:
var text = (Session["value"] ?? "").ToString();
if (text != "")
{
...
}
如果您删除了冗余,那么您的代码一开始就会简单得多:
var value = Session["value"];
if (value != null)
{
string text = value.ToString();
if (text != "")
{
// Use text
}
}
这已经表示了每个逻辑操作一次,这很好
或者,您可以使用空合并运算符:
var text = (Session["value"] ?? "").ToString();
if (text != "")
{
...
}
也许:
string value = Session["value"] as string ?? "";
// no need for an `if`
也许:
string value = Session["value"] as string ?? "";
// no need for an `if`
你试过了吗
if(!string.IsNullOrEmpty(Session["Value"]) as string)
{
//do something
}
或
你试过了吗
if(!string.IsNullOrEmpty(Session["Value"]) as string)
{
//do something
}
或
使用
as
转换为字符串
以避免异常:
string text = Session["value"] as string;
if(!string.IsNullOrEmpty(text))
{
var a = text;
}
使用
as
转换为字符串
以避免异常:
string text = Session["value"] as string;
if(!string.IsNullOrEmpty(text))
{
var a = text;
}
那么这个呢:
var candidate = Convert.ToString(Session["var"]);
if(candidate.Length > 0){
DoSomething(candidate);
}
当返回string.Empty
时,将处理转换,无论其实际类型是什么,如果值为null
那么:
var candidate = Convert.ToString(Session["var"]);
if(candidate.Length > 0){
DoSomething(candidate);
}
如果值为null
就我个人而言,我会使用@JonSkeet的答案,在调用ToString
-单行程序之前,使用带括号的?
空合并运算符将语句解析为字符串
只是另一个无意义的选项:您可以将其压缩到扩展方法中,因为扩展方法调用在空“目标”上工作:
然后你可以打电话:
string a = Session["value"].SafeToString();
if (string.IsNullOrEmpty(a))
{
// Handle null or empty strings.
}
不过,我不确定我是否会自己做这件事,因为null项方法调用工作起来似乎很奇怪——除非那个人记得扩展方法是如何编译的
此外,如果对名称空间不严格,扩展object
确实会污染object的类型接口。
就我个人而言,我会使用@JonSkeet的答案,在调用ToString
-单行程序之前,使用带括号的?
空合并运算符将语句解析为字符串
只是另一个无意义的选项:您可以将其压缩到扩展方法中,因为扩展方法调用在空“目标”上工作:
然后你可以打电话:
string a = Session["value"].SafeToString();
if (string.IsNullOrEmpty(a))
{
// Handle null or empty strings.
}
不过,我不确定我是否会自己做这件事,因为null项方法调用工作起来似乎很奇怪——除非那个人记得扩展方法是如何编译的
此外,如果您对名称空间不严格,扩展
对象
确实会污染对象的类型接口。使用string.IsNullOrEmpty((string)对象)
!使用string.IsNullOrEmpty((string)对象)
!如果您知道为什么不应该,请告诉我。@FreemanSession[“Value”]
是一个对象,而不是字符串-类型错误。以字符串的形式尝试会话[“Value”]是否正确?除了我两次调用ToString方法之外,如果它不是空字符串,你不能使用Convert.ToString(Session[“value”])
返回null,而不是抛出异常(?)当你不能以任何其他方式强制转换时,只使用Convert类,如果我不想抛出异常,我会使用'as'关键字。如果你知道为什么不应该抛出异常,请告诉我。@FreemanSession[“Value”]
是一个对象,而不是字符串-类型错误。以字符串的形式尝试会话[“Value”]是否正确?除了我两次调用ToString方法之外,如果它不是空字符串,你不能使用Convert.ToString(Session[“value”])
返回null,而不是抛出异常(?)当你不能以任何其他方式强制转换时,只使用Convert类,如果我不想抛出异常,我会使用'as'关键字。Session[]
的结果是一个对象,因此不能隐式转换为字符串,这将无法编译。请尝试将Session[“”]设置为string
。抱歉,值得注意的是设置为string
在语义上与设置为string
(OP所要求的)不同,因此不太适合此解决方案ToString
将适用于非空的非字符串项。@AdamHoudsworth:然后他可能要添加value=value.ToString()
。另外,我相当肯定OP刚才使用了这个表达式Session[“value”].ToString()
,尽管他实际上想要这个:(String)Session[“value”]
。很多人都这样做。我认为它也应该告诉我们,在这一点上不可能有空引用。同意最后的答案。我使用了伪编码,因此我将根据具体情况进行更改。Session[]
的结果是一个对象,因此不能隐式转换为字符串,这将无法编译。请尝试将Session[“”]设置为string
。抱歉,值得注意的是设置为string
在语义上与设置为string
(OP所要求的)不同,因此不太适合此解决方案ToString
将适用于非空的非字符串项。@AdamHoudsworth:然后他可能要添加value=value.ToString()
。另外,我相当肯定OP刚才使用了这个表达式Session[“value”].ToString()
,尽管他实际上想要这个:(String)Session[“value”]
。很多人都这样做。我认为它也应该告诉我们,在这一点上不可能有空引用。同意最后的答案。我使用了伪编码,所以我会根据具体情况进行更改。@SteveB:对不起,如果会话[“值”]
的值不为空,并且它得到了一个非常糟糕的ToString()
@ConradFrix的实现,那么与“ToString()
相比较的打字错误可能会返回null