无法将字符串强制转换为C#中的通用列表
问题描述:
我写了一个代码来将上传的图像名称存储到会话列表中。 用户只能上传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”
我怎样才能解决这个问题,或者是有任何方式来完成这个功能。
答
问题是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
。
答
从前面提到的评论:
@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)
这听起来像'会议[“形象”]'*包含一个*'string'作为直接'string'参考 - 不一个列表。 –
你可以请你分享你的代码如何分配一个优点'会话[“图像”] –
@StephanBauer 我已经在每行中写了以下几行: lstImageNames.Add(destFileName); context.Session [“Images”] = lstImageNames; – ace