Это троичный оператор. Синтаксис:
condition ? <value if true> : <value if false>
, поэтому, если imageNum равно 1, imageData = z.Image1.
Если он не равен 1, он проверяет оставшуюся часть утверждения. В этом случае ложное условие имеет другую троицу, и оно проверяет, если imageNum = 2, если да, imageData будет z.Image2.
Если imageNum не 1 или 2, imageData будет нулевым.
Это более компактный способ написания этого:
if(imageNum == 1)
imageData = z.Image1;
else if(imageNum ==2)
imageData = z.Image2;
else
imageData = null;
Редактировать
? на самом деле используется в этом методе 3 различными способами.
Первый описан выше. Второй int?
говорит, что это значение имеет значение null. Это может быть либо null, либо int.
Третий называется Colecing, и он выглядит как imageNum = imageNum ?? 0;
Это означает, что вы пытаетесь присвоить значение imageNum для imageNum, и в случае, когда imageNum равно нулю, вы получите значение по умолчанию 0.
Это более компактный способ:
if(imageNum == null)
imageNum = 0;