J'ai un tableau de chaînes direct, pourquoi IndexOf serait indisponible? Je cible .Net 3.5Pourquoi IndexOf serait-il indisponible dans mon tableau? Je cible .Net 3.5
Merci
J'ai un tableau de chaînes direct, pourquoi IndexOf serait indisponible? Je cible .Net 3.5Pourquoi IndexOf serait-il indisponible dans mon tableau? Je cible .Net 3.5
Merci
Parlez-vous de la méthode Array.IndexOf:
var array = new[] { "a", "b", "c" };
Console.WriteLine(Array.IndexOf(array, "b"));
Oui merci, j'utilisais (MyArrayName.IndexOf ("test")); –
Probablement parce que vous assumez c'est une méthode d'instance au lieu d'une méthode statique:
using System;
class Program {
static void Main(string[] args) {
string[] arr = new string[] { "hello", "world" };
int index = Array.IndexOf(arr, "world");
// Not:
//int index = arr.IndexOf("world");
System.Diagnostics.Debug.Assert(index == 1);
}
}
Considérons List<string>
au lieu d'un tableau, Liste > .IndexOf() est une méthode d'instance.
La raison pour laquelle vous pensiez pouvoir appliquer IndexOf comme s'il s'agissait d'une méthode d'instance est que certains pour les types une méthode d'extension enveloppe Array.IndexOf() comme Microsoft a pour la classe GeoCoordinate.
qui suit travaillera sur tous tableaux:
public static class ExtensionMethods
{
public static int IndexOf(this object[] oa, object o)
{
return Array.IndexOf(oa, o);
}
}
Et voici un extrait de code montrant comment le code devient plus lisible - au prix de le rendre dépendant de la classe de méthode d'extension. J'ai délibérément défait le sucre syntaxique sur l'un d'eux afin que vous puissiez comparer côte à côte.
int m = Array.IndexOf(II, closestItems[0]);
int n = II.IndexOf(closestItems[1]);
show erreur de compilation :) s'il vous plaît – Woot4Moo