J'ai obtenu un code généré automatiquement à l'aide de Lambdas lors du développement d'une application Xamarin:
public override string this[int position] => throw new NotImplementedException();
public override int Count => throw new NotImplementedException();
Que signifie l'opérateur =>
dans ce contexte?
Merci R
3 réponses
Ce ne sont pas des lambdas, ce sont Membres de fonction à corps d'expression!
Dans le contexte d'une propriété, ce sont essentiellement les getters d'une propriété simplifiée pour devenir une seule expression (par opposition à une instruction entière).
Cette:
public override int Count => throw new NotImplementedException();
Est équivalent à:
public override int Count {
get { throw new NotImplementedException(); }
}
Tout d'abord, clarifions que l'opérateur =>
est actuellement utilisé dans deux contextes différents:
Expressions lambda. Vous les verrez souvent dans Linq, par exemple
var query = Customers.OrderBy(x => x.CompanyName);
Expression des fonctions corporelles. C'est ce que nous avons ici.
Afin de comprendre ce que signifie =>
, veuillez consulter l'exemple simple suivant:
using System;
public class Program
{
public void Main()
{
var obj = new Test();
obj.Count.Dump();
obj[7].Dump();
}
class Test
{
public int Count => 1;
public string this[int position] => $"2 x {position} = {(2*position)}";
}
}
Objet de vidage (Int32)
1
Objet de vidage (chaîne)
2 x 7 = 14
Ici, le code NotImplementedException
, qui est juste là pour vous dire (le développeur) que la propriété et l'indexeur ne sont pas implémentés mais devraient l'être, est remplacé par une fonction:
- Count est une propriété en lecture seule renvoyant toujours 1
- chaque fois que vous appliquez
[ ... ]
à l'objet, l'index doublé est renvoyé
Notez que dans les versions antérieures de C #, vous deviez écrire:
class Test
{
public int Count { get { return 1; } }
public string this[int position] {
get { return String.Format("2 x {0} = {1}",
position, (2*position).ToString()); }}
}
Ce qui équivaut au code ci-dessus. Donc, en substance, en C # 7, vous devez taper beaucoup moins pour obtenir le même résultat.
Comme @sweeper le dit dans votre exemple, ils ne se rapportent pas aux expressions lambda car ce sont des opérateurs de corps d'expression (qui ont été introduits en C # 6 et développés en 7). Il est également utilisé pour indiquer une expression lambda, donc son utilisation est double.
Vous trouverez ici de plus amples informations sur chaque utilisation de l'opérateur =>
; https://docs.microsoft.com/ fr-fr / dotnet / csharp / language-reference / operators / lambda-operator
De nouvelles questions
c#
C # (prononcé "see sharp") est un langage de programmation multi-paradigme de haut niveau, typé statiquement développé par Microsoft. Le code C # cible généralement la famille d'outils et d'exécutions Microsoft .NET, notamment le .NET Framework, .NET Core et Xamarin. Utilisez cette balise pour les questions sur le code écrit en C # ou en spécification formelle de C #.