Aracılığıyla paylaş


?: 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 trueolarak değerlendirilip değerlendirilmediğine false 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

C# dili başvuru belgesi, C# dilinin en son yayımlanan sürümünü gösterir. Ayrıca, yaklaşan dil sürümü için genel önizlemelerdeki özelliklere yönelik ilk belgeleri içerir.

Belgelerde ilk olarak dilin son üç sürümünde veya geçerli genel önizlemelerde sunulan tüm özellikler tanımlanır.

İpucu

Bir özelliğin C# dilinde ilk tanıtıldığı zamanları bulmak için C# dil sürümü geçmişi makalesine bakın.

İfadenin condition veya trueolarak false 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 consequent türlerialternative, 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 atayabilirsinizref. Bunu başvuru döndürmesi olarak kullanın veya bir , out, inveya ref readonlyyöntem parametresi olarak refgeçirin. 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 consequent türü alternative aynı olmalıdır. Koşullu başvuru ifadeleri hedef türünde değildir.

Koşullu işleç ve deyim if

Bir değeri koşullu olarak hesaplamanız gerektiğinde deyimiif yerine koşullu işleci kullanmak daha kısa kodlara neden olabilir. 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.