如何在从会话列表中检索值时处理空值

时间:2017-05-30 07:00:14

标签: c# asp.net

我通过检索& amp;存储会话中的多个值。从会话中分配值,如下所示:

var imageSessList = (List<string>)Session["ImagesNames"];

if (imageSessList != null)
{
    string image1 = imageSessList[0];
    string image2 = imageSessList[1];
    string image3 = imageSessList[2];
    string image4 = imageSessList[3];
}

但是如果会话只包含3个值,那么当分配string image4 = imageSessList[3];时它会抛出null错误。

如何在这种情况下处理null。

7 个答案:

答案 0 :(得分:2)

会话中的值可能为null,因此您必须在转换它们之前检查null。因此,初始条件为if (Session["ImagesNames"] != null)现在可以安全地投射它们并分配给imageSessList。因此变量imageSessList将包含会话变量中的项,并且您需要根据它们的索引获取这些项,然后在访问它们之前更好地检查该数组索引是否存在。所以完整的代码将是这样的:

if (Session["ImagesNames"] != null)
{
    var imageSessList = (List<string>)Session["ImagesNames"];
    string image1 = imageSessList.Count>0? imageSessList[0]:"";
    string image2 = imageSessList.Count>1? imageSessList[1]:"";
    string image3 = imageSessList.Count>2? imageSessList[2]:"";
    string image4 = imageSessList.Count>3? imageSessList[3]:"";
    // Continue the job with these image variables
    // Variables will be "" if those values are not found in the list
}

答案 1 :(得分:0)

您可以为所有

执行此操作
var imageSessList = (List<string>)Session["ImagesNames"];


                    if (imageSessList != null)
                    {
                       string img1= imageSessList.Count>0? imageSessList[0]:"";
                    }

答案 2 :(得分:0)

如果您需要单独处理每个文件,可以使用forforeach循环,如下所示

var imageSessList = Session["ImagesNames"] as List<string>;
foreach(string file in imageSessList)
{
   //do something with file
}

如果您需要4个文件来处理某些内容,请检查项目计数并继续

if(imageSessList!=null && imageSessList.Count ==4)
{
    string image1 = imageSessList[0];
    string image2 = imageSessList[1];
    string image3 = imageSessList[2];
    string image4 = imageSessList[3];
}else
{
    // show error message 
}

答案 3 :(得分:0)

检查以下代码行。通过这种方式,如果您的会话不包含第4项,第3项或第2项,您将不会收到任何错误。如果项目在会话列表中,它将绑定项目值。

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

答案 4 :(得分:-1)

请务必先检查该会话值是否存在......

if(Session["ImagesNames"] != null){...}

甚至更好地使用as运算符......

var imageSessList = Session["ImagesNames"] as List<string>;


            if (imageSessList != null)
            {
                string image1 = imageSessList[0];
                string image2 = imageSessList[1];
                string image3 = imageSessList[2];
                string image4 = imageSessList[3];
            }

然后检查列表索引中的所需键...确保您没有尝试访问索引中不存在的键...

if(imageSessList.Count > 0) image1 = imageSessList[0];
if(imageSessList.Count > 1) image2 = imageSessList[1];
if(imageSessList.Count > 2) image3 = imageSessList[2];

答案 5 :(得分:-1)

为什么不在字符串变量中传递值之前检查值是否为空?

string image1 = imageSessList[3] ?? string.Empty;

答案 6 :(得分:-2)

试试这个。

 if (imageSessList != null)
                {
                    string image1 = Convert.Tostring(imageSessList[0]);
                    string image2 =  Convert.Tostring(imageSessList[1]);
                    string image3 =  Convert.Tostring(imageSessList[2]);
                    string image4 =  Convert.Tostring(imageSessList[3]);
                }