C # EmptyIfNull-Erweiterung für einen beliebigen IEnumerable zur Rückgabe eines leeren abgeleiteten Typs

Angenommen, Nullen und leere Auflistungen sind gleichbedeutend, ich versuche, eine Erweiterungsmethode für IEnumerable-Typen zu schreiben, um leere Auflistungen des abgeleiteten Typs anstelle von Nullen zurückzugeben. Auf diese Weise muss ich Nullprüfungen nicht überall wiederholen und bekomme keine IEnumerable zurück, die ich umsetzen muss.

z.B

List<Foo> MethodReturningFooList()
{
...
}

Foo[] MethodReturningFooArray()
{
...
}

void Bar()
{
    List<Foo> list = MethodReturningFooList().EmptyIfNull();
    Foo[] arr = MethodReturningFooArray().EmptyIfNull();
}

public static class Extension
{
    public static T EmptyIfNull<T>(this T iEnumerable)
        where T : IEnumerable, new()
    {
        var newTypeFunc = Expression.Lambda<Func<T>>(Expression.New(typeof(T))).Compile();
        return iEnumerable == null ? newTypeFunc() : iEnumerable;
    }
}

Diese Erweiterung scheint zu funktionieren, aber sieht jemand irgendwelche Fallstricke?

Antworten auf die Frage(6)

Ihre Antwort auf die Frage