?: 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 false
olarak 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 false
olarak true
değerlendirilmesi gerekir. olarak değerlendirilirse condition
true
consequent
, ifade değerlendirilir ve sonucu işlemin sonucu olur. olarak değerlendirilirse condition
false
alternative
, 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 , , in
out
veya ref readonly
yöntem parametresi olarak ref
geç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: