17

Jan

Function-null coalescing operator C#

 

 

Ciao a tutti

 

in ufficio oggi si è discusso dell’utilità del null coalescing operator per le funzioni, tipo poter scrivere qualcosa come

 

var xx = GetValue()??.Value1??.SubValue1;

senza far scoppiare il finimondo di null-reference exceptions Sorriso

 

ho pensato, nel mentre che aspettiamo i guru di C# che implementino questa funzionalità già richiesta su alcuni forum

es. http://visualstudio.uservoice.com/forums/121579-visual-studio/filters/top

 

possiamo sempre implementarla come Extension method:

 

esempio console application:

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication2
{
    class Program
    {
        static void Main(string[] args)
        {
            var value1 = GetValue().Take(x => x.ConcreteValue);
            var value2 = GetNullValue().Take(x => x.ConcreteValue);
            var nullable1 = GetValue().Take(x => x.NullableValue);
            var nullable2 = GetNullValue().Take(x => x.NullableValue);

            var cc = GetNullValue().Take(x => x.Builder).Take(x => x.Capacity);
        }

        static Value GetValue()
        {
            return new Value { ConcreteValue = 10 };
        }

        static Value GetNullValue()
        {
            return null;
        }
    }

    public static class Extensions
    {
        public static R Take(this T arg, Func getter)
            where T : class
        {
            if (arg == null)
                return default(R);
            else
                return getter(arg);
        }
    }

    public class Value
    {
        public int ConcreteValue { get; set; }
        public string NullableValue { get; set; }
        public StringBuilder Builder { get; set; }
    }
}

by Antonio Esposito on 1/17/2014
Post archive