2017-06-02 17 views
0

我写了一个代码来将上传的图像名称存储到会话列表中。 用户只能上传4张图片,因此会话中最多有4张图片名称。无法将字符串强制转换为C#中的通用列表

用户可以根据需要上传1,2,3或4张图片。如果用户只选择2个图像,会话将只有2个,所以剩下的2个会抛出索引超出限制的异常!

来处理这种情况我写了下面的代码。

string image1 = ""; 
string image2 = ""; 
string image3 = ""; 
string image4 = ""; 
var imageSessList = (List<string>)Session["Images"]; 
if (imageSessList != null) 
{ 
    for (int i = 0; i < imageSessList.Count; i++) 
    { 
     if (imageSessList[i] != null && i == 0) 
     { 
      image1 = imageSessList[i]; 
     } 
     if (imageSessList[i] != null && i == 1) 
     { 
      image2 = imageSessList[i]; 
     } 
     if (imageSessList[i] != null && i == 2) 
     { 
      image3 = imageSessList[i]; 
     } 
     if (imageSessList[i] != null && i == 3) 
     { 
      image4 = imageSessList[i]; 
     } 
    } 
} 

但现在它显示以下错误:“无法转换类型‘System.String’的对象键入“System.Collections.Generic.List”

我怎样才能解决这个问题,或者是有任何方式来完成这个功能。

+2

这听起来像'会议[“形象”]'*包含一个*'string'作为直接'string'参考 - 不一个列表。 –

+1

你可以请你分享你的代码如何分配一个优点'会话[“图像”] –

+0

@StephanBauer 我已经在每行中写了以下几行: lstImageNames.Add(destFileName); context.Session [“Images”] = lstImageNames; – ace

回答

2

问题是Session["Images"]不包含一个列表,而是一个字符串。你必须纠正这一点在设置方面。

一个通用的解决方案,以避免这样的错误是通过包装会话状态为一类,并且使用与类的类型属性来获取和设置:

public static class SessionState 
{ 
    public List<string> Images 
    { 
     get 
     { 
      return HttpContext.Current.Session["Images"] as List<string>; 
     } 
     set 
     { 
      HttpContext.Current.Session["Images"] = value; 
     } 
    } 
} 

现在你可以获取和设置SessionState.Images

+0

(列表)Session [“Images”];是会话列表,我也能看到它 – ace

+1

你是什么意思? –

+0

List )Session [“Images”];这一行包含会话列表。 – ace

0

从前面提到的评论:

@StephanBauer i have written following lines in foreach: lstImageNames.Add(destFileName); context.Session["Images"] = lstImageNames; – ace 22 mins ago

如果context.Session["Images"] = lstImageNames;在foreach循环完成,然后要覆盖每一次会话中的价值。

我还想指出的另一件事是,字符串不仅可以为空而且也是空的。所以,你可能想改变你的空支票(只是一个建议):

if (!string.IsNulOrEmpty(imageSessList[i])l && i == 0)