2 Stimmen

Warum kann der C#-Compiler nicht implizit auf `Foo foo = (int x) => x.ToString();` für den Delegatentyp `static delegate R Foo<I, R>(I i);` schließen?

class Program
{
    static delegate R Foo<I, R>(I i);

    static void Main(string[] args)
    {

        Foo<int, string> foo = (int x) => x.ToString();

        // Why can't the compiler IMPLICITLY infer the following declaration?
        //Foo foo = (int x) => x.ToString();
    }
}

EDIT 1: Der obige Code ist eigentlich nicht kompilierbar. Der Delegat ich definiert hat statische Modifikator, die nicht anwendbar ist!

1voto

J.D. Punkte 2094

Sie könnten eine kleine Wrapper-Klasse erstellen.

static class Foo {
    public static Foo<I, R> Create<I, R>(Foo<I, R> foo) {
        return foo;
    }
}

Dann funktioniert das gut:

var foo = Foo.Create((int x) => x.ToString());

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X