?: işleci - üçüncül koşullu işleç

Üçüncül koşullu işleç olarak da bilinen koşullu işleç?:, boole ifadesini değerlendirir ve Boole ifadesinin veya falseolarak değerlendirilip değerlendirilmediğine true bağlı olarak, aşağıdaki örnekte gösterildiği gibi iki ifadeden birinin sonucunu döndürür:

string GetWeatherDisplay(double tempInCelsius) => tempInCelsius < 20.0 ? "Cold." : "Perfect!";

Console.WriteLine(GetWeatherDisplay(15));  // output: Cold.
Console.WriteLine(GetWeatherDisplay(27));  // output: Perfect!

Yukarıdaki örnekte gösterildiği gibi, koşullu işlecin söz dizimi aşağıdaki gibidir:

condition ? consequent : alternative

İfadenin condition veya falseolarak true değerlendirilmesi gerekir. olarak değerlendirilirse conditiontrueconsequent, ifade değerlendirilir ve sonucu işlemin sonucu olur. olarak değerlendirilirse conditionfalsealternative, ifade değerlendirilir ve sonucu işlemin sonucu olur. Yalnızca consequent veya alternative değerlendirilir. Koşullu ifadeler hedef türündedir. Diğer bir deyişle, bir koşullu ifadenin hedef türü biliniyorsa ve alternative türlericonsequent, aşağıdaki örnekte gösterildiği gibi hedef türe örtük olarak dönüştürülebilir olmalıdır:

var rand = new Random();
var condition = rand.NextDouble() > 0.5;

int? x = condition ? 12 : null;

IEnumerable<int> xs = x is null ? new List<int>() { 0, 1 } : new int[] { 2, 3 };

Koşullu ifadenin hedef türü bilinmiyorsa (örneğin, anahtar sözcüğünü kullandığınızda var ) veya türü consequent aynı alternative olmalıdır veya bir türden diğerine örtük bir dönüştürme olmalıdır:

var rand = new Random();
var condition = rand.NextDouble() > 0.5;

var x = condition ? 12 : (int?)null;

Koşullu işleç doğru ilişkilendiricidir, yani formun bir ifadesidir

a ? b : c ? d : e

olarak değerlendirilir

a ? b : (c ? d : e)

İpucu

Koşullu işlecin nasıl değerlendirildığını anımsamak için aşağıdaki anımsatıcı cihazı kullanabilirsiniz:

is this condition true ? yes : no

Koşullu başvuru ifadesi

Koşullu başvuru ifadesi, aşağıdaki örnekte gösterildiği gibi koşullu olarak bir değişken başvurusu döndürür:

int[] smallArray = {1, 2, 3, 4, 5};
int[] largeArray = {10, 20, 30, 40, 50};

int index = 7;
ref int refValue = ref ((index < 5) ? ref smallArray[index] : ref largeArray[index - 5]);
refValue = 0;

index = 2;
((index < 5) ? ref smallArray[index] : ref largeArray[index - 5]) = 100;

Console.WriteLine(string.Join(" ", smallArray));
Console.WriteLine(string.Join(" ", largeArray));
// Output:
// 1 2 100 4 5
// 10 20 0 40 50

Koşullu başvuru ifadesinin sonucunu atayabilir, başvuru dönüşü olarak kullanabilir veya bunu , , inoutveya ref readonlyyöntem parametresi olarak refgeçirebilirsiniz.ref Yukarıdaki örnekte gösterildiği gibi koşullu başvuru ifadesinin sonucuna da atayabilirsiniz.

Koşullu başvuru ifadesinin söz dizimi aşağıdaki gibidir:

condition ? ref consequent : ref alternative

Koşullu işleç gibi, koşullu başvuru ifadesi de iki ifadeden yalnızca birini değerlendirir: consequent veya alternative.

Koşullu başvuru ifadesinde ve alternative türü consequent aynı olmalıdır. Koşullu başvuru ifadeleri hedef türünde değildir.

Koşullu işleç ve deyim if

Bir if değeri hesaplamak için koşullu olarak ihtiyaç duyduğunuz durumlarda deyim yerine koşullu işlecin kullanılması daha kısa kodla sonuçlanabilir. Aşağıdaki örnekte, bir tamsayıyı negatif veya negatif olmayan olarak sınıflandırmanın iki yolu gösterilmektedir:

int input = new Random().Next(-5, 5);

string classify;
if (input >= 0)
{
    classify = "nonnegative";
}
else
{
    classify = "negative";
}

classify = (input >= 0) ? "nonnegative" : "negative";

İşleç aşırı yüklenebilirliği

Kullanıcı tanımlı bir tür koşullu işleci aşırı yükleyemez.

C# dili belirtimi

Daha fazla bilgi için C# dil belirtiminin Koşullu işleç bölümüne bakın.

Daha yeni özelliklerin belirtimleri şunlardır:

Ayrıca bkz.