2017-04-17 115 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");