2013-07-31 52 views
1

我有我动态创建一个会话变量,因此可以说,例如,我有以下会话变量传递列表<string>的功能

Session["area1"] 
Session["area2"] 
Session["area3"] 
Session["area4"] 

而且在每个这些会议的,我有一个列表,有

然后我为了得到名称将是什么,在我的代码中使用它有这个

string areaName = "area" + Session["area"]; 

会议[“区”]是增加一个会话变量它基于单击按钮的次数

现在,如果我尝试将areaName传递给需要List作为参数的函数,它不会让我这样做,即使该会话变量中的值是一个列表

我只使用“AREANAME”,以便能够获取会话

我如何使用它,以便将它传递给函数,需要一个列表类型的名称?

回答

1

致电以下:

string areaName = "area" + Session["area"]; 

你是说,把字符串“区域”,并追加到从会话(这是默认的对象)的变量,将其称为ToString()方法。你的最终结果是一个字符串,而不是一个列表。 (而不是一个有意义的)。

您需要做的就是取Session值并将其转换为您知道的类型。

method((List<string>)Session["area"]) 

method(Session["area"] as List<string>) 

你不能只在会话[“区”]通过不先铸造究其原因,是因为会议将返回你的变量作为对象。当然,它可能是内存中的一个列表,但系统将它视为与其他任何对象相同(查找Polymorphism了解更多信息),而不是它期望的列表。因此,除非将其转换为正确的类型,否则您将收到编译时错误。

+0

*仅*如果(1)有可能不是'List ',那么可以使用带有'as'的形式,以及(2)您可以使用(或反应)一个在这种情况下,'null'值。如果这些标准不符合,请使用其他语法。 –

+0

@JeppeStigNielsen - 我相信你的陈述是相反的,如果你确定'Session'对象包含'List ',那么只使用'(List )'强制句法。否则会抛出异常。另外,我相信防守性编程占了'null'。 –

+0

我需要使用areaName,因为我不知道它会采用哪个会话,因为它们是动态的,所以这就是为什么我创建字符串areaName只是为了能够获取它将在那一刻使用的会话的名称 – user2593590

2

如果你知道它包含一个列表,然后做演员。例如

myMethod(Session["area1"] as List<string>); 
+0

使用'as'语法提供了额外的好处:如果转换失败,不会生成异常,因为'List '将为空,并且仍然传递给方法。在调用方法中使用它之前,请确保检查列表是否为空。 –

+0

同意卡尔。如果你知道类型是好的,不要使用'as'。如果你打算在之后立即检查'null',只能使用'as'。 –

+0

这就是现在发生的事情,我可以看到,当我把它作为一个列表将它转换为null时,但是当我尝试打印出会话[areaName]的值时,我可以获得所有值没有问题 – user2593590