2017-04-17 117 views
-1

有没有办法检查你的会话变量是否包含某些内容......就像列表中有一个方法“Contains”一样。有没有类似的东西?一些方法或东西?ASP.NET MVC 5会话

+0

您是否试图查看会话本身是否包含某些内容?或者如果Session中的某个对象包含某些内容? – mason

+0

@mason如果会话中的某个对象包含某些东西 – john

+0

您只需将其转换为正确的对象类型,则可以使用该对象上的任何方法。 – mason

回答

-1

当您从Session检索项目时,它们的类型为System.Object。这意味着你没有得到对象的实际类型的任何实际方法。您可以将它转换为正确的类型。在这种情况下,这听起来像你正在存储一个List<string>。所以我们可以使用as operator。如果对象不是这种类型或者为空,myList将为空。否则它将是您指定的类型。

List<string> myList = Session["myKey"] as List<string>(); 

if(myList == null) 
{ 
    //either Session["myKey"] was null or the object wasn't a List<string> 
} 
else 
{ 
    if(myList.Contains("fuzzy puppies")) 
    { 
     //your list contains fuzzy puppies 
    } 
    else 
    { 
     //your list doesn't contain fuzzy puppies 
    } 
} 

在对象上调用.ToString()会根据对象类型给出不同的结果。默认行为是打印出对象的类型。但类型可以覆盖此行为。例如,在字符串上调用.ToString()只会给你字符串本身。在代表某个XML的对象上调用.ToString()可能会将XML作为字符串提供给您。由于List<string>不覆盖System.Object.ToString()的默认行为,它只是打印出“System.Collections.Generic.List`1 [System.String]”

+0

将是很好的提及.ToString()不会将该对象转换为字符串,但只是返回对象类型 – john

+0

@john在您之前的一步,我已经添加了一个解释。 – mason

+0

...呵呵不错 – john

-1

首先检查Session [“yoursession_var”]是否为空。然后转换为List()。然后使用Exists(),如下所述:how to use Exist in List<string> in C#

+0

'.ToString()'不会转换为字符串。为什么要使用IndexOf来代替[String.Contains](https://msdn.microsoft.com/en-us/library/dy85x1sa(v = vs.110).aspx)? – mason

+0

从技术上讲,你可以使用(string)Session [“yoursession_var”],任何一个都会得到一个字符串,然后你可以使用IndexOf()或Contains()。至于为什么我不使用Contains(),数学运算通常比字符串运算更有效,但是如果你看一下CLR,你会发现Contains()在引擎下使用IndexOf(),所以差异相同。顺便说一句,我会尽量避免魔术字符串 - 常量更好。 –

+0

1)Contains是专门用于检测一个字符串是否包含另一个字符串,并且不需要在BCL中重新实现代码。2)ToString不是强制转换3)问题是关于List ,而不是字符串。 – mason

0

嗨,你可以尝试铸造你的会议,所以它可以有一个类型为示例

var listofperson = Session["ListofPerson"] as List<string>; 

var hasGeorge = listofperson.Contains("George");