هدف از Null-Conditional Operator کاهش کدنویسی حالات مقایسه ای مختلف با null هست .
مثال زیر را در نظر داشته باش
public static string Truncate(string value, int length)
{
string result = value;
if (value != null) // Skip empty string check for elucidation
{
result = value.Substring(0, Math.Min(value.Length, length));
}
return result;
}
درون متد، شرط null نبودن را بررسی کرده درصورتی که متغییر value مخالف null باشه متد Substring آن فراخوانی میشود.(اگر null باشد با خطا مواجه خواهد شد).در صورتی بخواهیم همان عملکرد کد را بصورت ساده تر نوشته شود کد بالا را بصورت زیر ساده تر بتویسیم
public static string Truncate(string value, int length)
{
return value?.Substring(0, Math.Min(value.Length, length));
}
در متد اصلاح شده همان عملکرد اما بصورت ساده تر نوشته میشود.در صورتی value نال باشد ،مقدار null برگشت داده میشود و در صورت null نبودن متدSubstring آن فراخوانی میشود و مقدار برگشتی متد را بازگشت خواهد کرد.
در مثالی دیگر چند حالت چک کردن null باهم در if چک میشود
var response = someProxy.SomeWebMethod();
// so many layers, so many potential nulls...
if (response != null && response.Results != null && response.Results.Status == Status.Success)
{
Console.WriteLine("We were successful!");
}
اگر آبجکت response مخالف null و ابجکت داخلی آن Results مخالف null باشد انگاه پراپرتی Status ان بررسی میشود که بصورت Null-Conditional Operator نوشته شود
var response = someProxy.SomeWebMethod();
// so much better!
if (response?.Results?.Status == Status.Success)
{
Console.WriteLine("We were successful!");
}