Widziałem wiele próbek kodu C# ze składnią =>
.użycie i wyjaśnienie => składnia
Czy ktoś może wyjaśnić, na czym polega ta składnia?
select x => x.ID
Widziałem wiele próbek kodu C# ze składnią =>
.użycie i wyjaśnienie => składnia
Czy ktoś może wyjaśnić, na czym polega ta składnia?
select x => x.ID
może ktoś wyjaśnić o co użycie => składni?
Składnia "grubej strzałki" służy do utworzenia czegoś pod nazwą Lambda Expression w języku C#. Jest to jedynie syntaktyczny cukier do tworzenia delegatów.
Wyrażenie podałeś nie ma żadnego sensu, ale widać było kiedyś dużo w LINQ:
var strings = new[] { "hello", "world" };
strings.Where(x => x.Contains("h"));
Składnia x => x.Contains("h")
będą wnioskować przez kompilator jako Func<string, bool>
który zostanie wygenerowany podczas kompilacji czas.
Edit:
Jeśli naprawdę chcesz zobaczyć, co się dzieje "za kulisami", można zapoznać się z kodem decompiled wewnątrz każdej NET Decompiler:
[CompilerGenerated]
private static Func<string, bool> CS$<>9__CachedAnonymousMethodDelegate1;
private static void Main(string[] args)
{
string[] strings = new string[]
{
"hello",
"world"
};
IEnumerable<string> arg_3A_0 = strings;
if (Program.CS$<>9__CachedAnonymousMethodDelegate1 == null)
{
Program.CS$<>9__CachedAnonymousMethodDelegate1 = new Func<string, bool>
(Program.<Main>b__0);
}
arg_3A_0.Where(Program.CS$<>9__CachedAnonymousMethodDelegate1);
}
[CompilerGenerated]
private static bool <Main>b__0(string x)
{
return x.Contains("h");
}
Można zobaczyć tutaj, że kompilator utworzył buforowany delegat typu Func<string, bool>
o nazwie Program.CS$<>9__CachedAnonymousMethodDelegate1
i nazwaną metodę o nazwie <Main>b__0
, która została przekazana do klauzuli Where
.
[ ++] dla "grubej strzałki", zawsze zastanawiałeś się, jak możesz to przeszukać. –
Ta składnia jest używana do wyrażenia lambda - https://msdn.microsoft.com/en-us/library/bb397687.aspx
delegate int del(int i);
static void Main(string[] args)
{
var myDelegateLambda = x => x * x; // lambda expression
Func<int, int> myDelegateMethod = noLambda; // same as mydelegate, but without lambda expression
int j = myDelegateLambda(5); //j = 25
}
private int noLambda(int x)
{
return x * x;
}
Jak widać, wyrażenie lambda jest bardzo przydatny do przekazywania prostych delegatów.
Jest to składnia używana dla lambda expresssion.
Poniżej składnia oznacza, wybierz obiekt x
i odbierz wartość x.ID
.
select x => x.ID
[wyrażeń lambda:? Dlaczego ich używam] (http://stackoverflow.com/questions/167343/c-sharp-lambda-expressions-why-should-i-use-them) –