MVC 3 - 什么是为什么以及为什么使用?在方法中 - 与先前线程无关的问题无法上传多个数据库映像

时间:2011-06-17 17:29:47

标签: c# asp.net asp.net-mvc-3

几个月前,NickLarsen kindley为我解决了一个问题。我应该问他那么这真的是我的错误。如果NickLarsen能够回复,感谢再次与我联系,如果没有,那么如果有其他人可以告诉我正确答案最适合它。提前谢谢。

上一个帖子是......

unable to upload multiple db images with asp.net mvc

NickLarsen使用以下代码,我想知道是什么以及为什么使用?在代码中。这是代码......

    public ActionResult GetImage(int id, int? imageNum)
    {
        imageNum = imageNum ?? 0; // here

        const string alternativePicturePath = @"/Content/question_mark.jpg";
        MemoryStream stream;

        SubProductCategory4 z = db.SubProductCategory4.Where(k => k.SubProductCategoryFourID == id).FirstOrDefault();

        byte[] imageData = null;

        if (z != null)
        {
            imageData = imageNum == 1 ? z.Image1 : imageNum == 2 ? z.Image2 : imageNum == 3 ? z.Image3  : null; // here
        }

        if (imageData != null)
        {
            stream = new MemoryStream(imageData);
        }
        else
        {
            var path = Server.MapPath(alternativePicturePath);

            stream = new MemoryStream();
            var imagex = new System.Drawing.Bitmap(path);
            imagex.Save(stream, System.Drawing.Imaging.ImageFormat.Jpeg);
            stream.Seek(0, SeekOrigin.Begin);
        }

        return new FileStreamResult(stream, "image/jpg");
    }

4 个答案:

答案 0 :(得分:3)

这是ternary运营商。语法是:

condition ? <value if true> : <value if false>

所以如果imageNum为1,则imageData = z.Image1 如果它不等于1,它继续检查语句的其余部分。在这种情况下,false条件有另一个三元组,并检查imageNum是否为2,如果是,则imageData将为z.Image2。

如果imageNum不是1或2,则imageData将为null。

这是一种更紧凑的写作方式:

if(imageNum == 1)
   imageData = z.Image1;
else if(imageNum ==2)
   imageData = z.Image2;
else
   imageData = null;

修改 的?实际上在这种方法中有3种不同的使用方法。 第一个如上所述。第二个int?表示该值是可以为空的int。它可以是null或int。

第三个叫做“换筋”,它看起来像imageNum = imageNum ?? 0; 这意味着您正在尝试将imageNum的值分配给imageNum,并且在imageNum为null的情况下,您将为其指定默认值0。

这是一种更紧凑的方式:

if(imageNum == null)
   imageNum = 0;

答案 1 :(得分:0)

??在视图中没有为参数imageNum提供值的情况;当ImageNum为空时,将分配0。如果你有一个1,1,当它为空时将被分配。

答案 2 :(得分:0)

?和??是分支逻辑。 ?意味着在1和2 1:2之间做出选择。 ??基本上是一个短路的?有意义吗?

答案 3 :(得分:0)

int x = y != null : 0

分解为

if (y != null)
x = y;
else
x = 0;

翻译成英文是“

除非y为null,否则X等于y。如果y为null,则x等于0.

您可以通过声明:

进一步简化此操作

int x? = y ?? 0