?: işleci (C# Başvurusu)
?:Üçlü işleç olarak da bilinen koşullu operatör, Boole ifadesi değerlendirir ve true false Aşağıdaki örnekte gösterildiği gibi, Boolean ifadesinin veya olarak değerlendirildiğine bağlı olarak 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özdizimi aşağıdaki gibidir:
condition ? consequent : alternative
conditionİfade veya olarak değerlendirilmelidir true false . condition, Olarak değerlendirilirse true , consequent ifade değerlendirilir ve sonucu işlemin sonucu olur. condition, Olarak değerlendirilirse false , alternative ifade değerlendirilir ve sonucu işlemin sonucu olur. Yalnızca consequent veya alternative değerlendirilir.
C# 9,0 ' den başlayarak Koşullu ifadeler Target türünde bulunur. Diğer bir deyişle, koşullu bir ifadenin hedef türü biliniyorsa, consequent alternative Aşağıdaki örnekte gösterildiği gibi, ve türlerinin hedef türüne örtülü olarak dönüştürülebilir olması gerekir:
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, var anahtar sözcüğünü kullandığınızda) veya C# 8,0 ve önceki sürümlerde, türü consequent ve alternative aynı olmalıdır veya bir türden diğerine örtük bir dönüştürme olması gerekir:
var rand = new Random();
var condition = rand.NextDouble() > 0.5;
var x = condition ? 12 : (int?)null;
Koşullu operatör doğru ilişkilendirilebilir, diğer bir deyişle, formun bir ifadesi
a ? b : c ? d : e
şöyle değerlendirilir
a ? b : (c ? d : e)
İpucu
Koşullu işlecin nasıl değerlendirildiğini anımsamak için aşağıdaki anımsatıcı cihazı kullanabilirsiniz:
is this condition true ? yes : no
Koşullu başvuru ifadesi
C# 7,2 ile başlayarak, bir ref yerel veya ref ReadOnly yerel değişkeni koşullu bir başvuru ifadesiyle koşullu olarak atanabilir. Ayrıca, bir Başvuru dönüş değeri veya ref Yöntem bağımsız değişkeniolarak bir koşullu başvuru ifadesi de kullanabilirsiniz.
Koşullu başvuru ifadesi için sözdizimi aşağıdaki gibidir:
condition ? ref consequent : ref alternative
Özgün koşullu operatör gibi, koşullu bir başvuru ifadesi iki ifadeden yalnızca birini değerlendirir: consequent ya da alternative .
Koşullu başvuru ifadesi durumunda, consequent ve türü alternative aynı olmalıdır. Koşullu başvuru ifadeleri Target türünde değil.
Aşağıdaki örnek, bir koşullu başvuru ifadesinin kullanımını gösterir:
var smallArray = new int[] { 1, 2, 3, 4, 5 };
var largeArray = new int[] { 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 işleç ve bir if ifade
Bir if ifade yerine koşullu işlecin kullanılması, bir değeri hesaplamak için koşullu olarak bir değer hesaplamanız gerektiğinde daha kısa kod oluşmasına neden olacaktır. Aşağıdaki örnek, bir tamsayıyı negatif veya negatif olmayan olarak sınıflandırmanın iki yolunu göstermektedir:
int input = new Random().Next(-5, 5);
string classify;
if (input >= 0)
{
classify = "nonnegative";
}
else
{
classify = "negative";
}
classify = (input >= 0) ? "nonnegative" : "negative";
Operatör overloadability
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.
C# 7,2 ve üzeri sürümlerde eklenen özellikler hakkında daha fazla bilgi için aşağıdaki özellik teklifi notlarına bakın: