Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Jótanács
Ez a cikk az Alapismeretek szakasz része azon fejlesztők számára, akik legalább egy programozási nyelvet ismernek, és c#-t tanulnak. Ha még csak most ismerkedik a programozással, először az Első lépések oktatóanyagokkal kezdje. További részletekért lásd a nyelvi referencia null értékű értéktípusát .
A null értékű értéktípusT? a mögöttes értéktípus Tösszes értékét jelöli, plusz egy további null értéket. Egy típusváltozó int? bármilyen egész számot tartalmaz, vagy null "nincs érték" értéket jelöl.
Az olyan értéktípusok, mint a int, bool és DateTime, alapértelmezés szerint nem képesek null tárolni. Ez a viselkedés hatékony, és számos hibát megelőz. Ez a korlátozás azonban problémát okoz, ha egy érték valóban hiányzik. Gyakori forgatókönyv az adatbázisból való olvasás: egy egész számoszlop tartalmazhat számot, vagy egyáltalán nem tartalmaz értéket (NULL AZ SQL-ben). Egy egyszerű int nem tudja képviselni ezt a hiányt, de int? igen.
Null értékeket elfogadó értéktípus deklarálása
Bármely értéktípushoz hozzáfűzve ? null értékűvé teheti:
int? age = null; // integer with no value yet
double? price = 9.99; // nullable double with a value
bool? isActive = null; // boolean with no value
age = 30; // assign a value later
int?[] scores = [100, null, 85, null, 72]; // array with absent entries
A null érték típusok alapértelmezett értéke null, nem az alapul szolgáló típus alapértelmezett értéke.
Annak ellenőrzése, hogy egy érték jelen van-e
A null értékű értékek ellenőrzésének és az érték kinyerásának ajánlott módja egy típusminta:
int? temperature = 72;
if (temperature is int degrees)
{
Console.WriteLine($"Temperature is {degrees}°F.");
}
else
{
Console.WriteLine("Temperature is not recorded.");
}
// Output: Temperature is 72°F.
A is int degrees minta csak akkor egyezik meg, ha temperature nem null értékű, és egyidejűleg az értéket degrees-hez köti. A null-ellenőrzést és az értékkiemelést is egy lépésben kapja meg.
Másik lehetőségként használja a HasValue és Value tulajdonságot:
int? count = 42;
if (count.HasValue)
{
Console.WriteLine($"Count is {count.Value}.");
}
else
{
Console.WriteLine("Count has no value.");
}
// Output: Count is 42.
Előnyben részesítse az is T value új kód mintáját. Bevezet egy új, nem nullázható változót, amely a megfelelő ágra terjed ki, ami egyértelműbbé teszi a szándékot, és kiküszöböli a kísértést, hogy véletlenül null ellenőrzésen kívüli használata során elkerülhetetlenül egy InvalidOperationException-t eredményezzen.
Közvetlenül is összehasonlíthatja a következőkkel null:
int? quantity = null;
if (quantity != null)
{
Console.WriteLine($"Quantity: {quantity.Value}");
}
else
{
Console.WriteLine("Quantity is not set.");
}
// Output: Quantity is not set.
Érték lekérése tartalékkal
Ha nem nullázható értékre van szüksége egy nullázhatóból, használja a GetValueOrDefault vagy a null-egyesítő operátort ??.
int? rating = null;
int result1 = rating.GetValueOrDefault(); // 0 (default for int)
int result2 = rating.GetValueOrDefault(-1); // -1 (specified fallback)
Console.WriteLine(result1); // 0
Console.WriteLine(result2); // -1
rating = 5;
int result3 = rating.GetValueOrDefault(-1); // 5 (actual value)
Console.WriteLine(result3); // 5
Az ?? operátor gyakran tisztább a kódban inline használva.
int? priority = null;
int effective = priority ?? 0; // 0 because priority is null
Console.WriteLine(effective); // 0
priority = 3;
effective = priority ?? 0; // 3 because priority has a value
Console.WriteLine(effective); // 3
Mindkét módszer a tényleges értéket adja vissza, ha van ilyen, és azt az alapértelmezett értéket, amit megad, ha nincs.
Aritmetika null értékű típusokkal
A null értékű értéktípusok számtani és összehasonlító operátorai emelve vannak: ha bármelyik operandus null, az eredmény is null lesz, nem hiba.
int? a = 10;
int? b = 20;
int? c = null;
int? sum = a + b; // both non-null: result is 30
int? product = a * c; // one operand is null: result is null
Console.WriteLine(sum); // 30
Console.WriteLine(product.HasValue); // False — null propagates through arithmetic
A null alapértelmezés szerint aritmetikai propagálással történik. Ha meg szeretné akadályozni, hogy egy null eredmény tovább kaszkádolódjon, kinyerje az értéket a számítás előtt ??-val vagy GetValueOrDefault-el.