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

-2
BRDroid 24 nov. 2017 à 10:05

3 réponses

Meilleure réponse

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(); }
}
4
Sweeper 24 nov. 2017 à 07:22

Tout d'abord, clarifions que l'opérateur => est actuellement utilisé dans deux contextes différents:

  1. Expressions lambda. Vous les verrez souvent dans Linq, par exemple
    var query = Customers.OrderBy(x => x.CompanyName);

  2. 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

Essayez-le dans DotNetFiddle

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.

0
Matt 28 nov. 2017 à 09:09

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

1
d219 22 août 2019 à 15:49
47467942