Fermer

juillet 15, 2019

C # 8: Indices et plage


La prochaine version majeure du langage C # (C # 8) offre de nouvelles fonctionnalités intéressantes. Voyons les opérateurs Hat et Range, deux nouvelles fonctionnalités de C # 8.

Le C # 8 contient des fonctionnalités intéressantes. Dans cet article, je vais parler de la mise en œuvre d'une interface par défaut: l'opérateur Hat ( ^ ) et l'opérateur de plage ( .. ). J'ai déjà écrit sur d'autres fonctionnalités de haut niveau en C # 8, alors n'hésitez pas à consulter mes publications sur les types de référence nullables et la déclaration d'utilisation .

Introduction

Les opérateurs de chapeau ( ^ ) et de range ( .. ) fournissent une syntaxe différente pour accéder aux éléments d'un tableau: Span ou ReadOnlySpan . L'opérateur d'intervalle permet de spécifier le début et la fin d'une plage pour une séquence.

Voyons quelques exemples. Considérez le code suivant dans lequel vous avez un tableau de chaînes et vous voulez obtenir les quatre premiers éléments:

 static void Main (string [] args)
{
  var people = nouvelle chaîne [] {"Jane", "Jean", "Gray", "Marcus", "Theophilus", "Keje"};
  var firstFour = GetFirstFourPersons (personnes);

  foreach (var personne dans firstFour)
  {
    Console.WriteLine (personne);
  }
}

chaîne statique [] GetFirstFourPersons (chaîne [] personnes)
{
  var résultat = nouvelle chaîne [4];
  pour (int i = 0; i <4; i ++)
  {
    résultat [i] = peuple [i];
  }
  retourne le résultat;
}

// résultat:
// Jane
// Jean
// Gris
// Marcus 

Nous pouvons le réécrire en utilisant l'opérateur de plage en passant l'opérande de plage à l'intérieur de [ et ] .

 statique vide Main (string [] args)
{
  var people = nouvelle chaîne [] {"Jane", "Jean", "Gray", "Marcus", "Theophilus", "Keje"};
  var premierfour = personnes [0..4];

  foreach (var personne dans firstFour)
  {
    Console.WriteLine (personne);
  }
} 

Cela donne le même résultat que l'exemple précédent. Avant et après le .. les opérateurs sont les index start et end à partir desquels obtenir une séquence de données. Il ne comprend pas l'élément dans l'index end dans le résultat.

La plage peut également être ouverte. Cela signifie que vous pouvez omettre les index de début, de fin ou les deux.

 var all = people [..]; // contient tous les éléments du tableau d'origine
var firstFour = people [..4]; // contient "Jane", "Jean", "Gray" et "Marcus"
var lastTwo = people [4..]; // contient "Theophilus" et "Keje" 

La ​​variable all est ouverte aux deux extrémités et renvoie donc tous les éléments. On peut aussi écrire var all = people [0..people.Length]. Si vous omettez l'index de début, il utilisera 0 comme index de début et s'il s'agit de l'index de fin, il utilisera la valeur sequence.Length pour résoudre la valeur.

Vous pouvez également déclarer des variables de plage:

 Range firstFourRange = ..4
var firstFour = people [firstFourRange]; // contient "Jane", "Jean", "Gray" et "Marcus" 

Avec C # 8, vous pouvez maintenant spécifier qu'un index est relatif à la fin du tableau. Vous faites cela en utilisant l'opérateur ^ . Étant donné le tableau de personnes nous pouvons obtenir le dernier élément de la séquence en utilisant de personnes [^1]. Le ^ 0 est identique à people.Length . Donc, si vous utilisez people [^0] pour obtenir le dernier élément de la séquence, vous obtiendrez une exception car elle se situe en dehors de la plage autorisée. Nous pouvons l'utiliser avec l'opérateur de plage:

 Plage lastTwoElement = ^ 2 ..
var lastTwo = people [lastTwoElement] // contient "Theophilus" et "Keje" 

Cela nous donnera les deux derniers noms. Omettre l’index de fin revient à utiliser ^ 0 (c’est-à-dire people.Length ) comme indice de fin. Nous pouvons également affecter l'index à une variable:

 Index lastIndex = ^ 1;
string value = people [lastIndex]; 

Cette prise en charge linguistique est basée sur deux nouveaux types, System.Index et System.Range . Le type Index représente un index dans une séquence et le type Range spécifie une sous-plage d'une séquence.

Wrap Up

Des nouveautés intéressantes vous attendent en C # 8. Ils incluent des fonctionnalités telles que les membres en lecture seule, des références nullables des fonctions locales statiques utilisant la déclaration et de nouveaux opérateurs permettant de travailler avec des index et des plages. J'ai écrit sur certaines de ces fonctionnalités et vous trouverez les liens ci-dessus. Dans ce post, j'ai parlé d'indices et de plages. Travailler avec les opérateurs de chapeau et de gamme. J'ai utilisé un exemple de base pour montrer comment vous pouvez utiliser l'opérateur hat pour spécifier des index relatifs à la fin de la séquence, ainsi que pour utiliser l'intervalle pour obtenir une sous-plage d'une séquence.





Source link