上一个帖子是......
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");
}
答案 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