2010-02-27 2 views

Répondre

4

Parlez-vous de la méthode Array.IndexOf:

var array = new[] { "a", "b", "c" }; 
Console.WriteLine(Array.IndexOf(array, "b")); 
+0

Oui merci, j'utilisais (MyArrayName.IndexOf ("test")); –

1

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.

0

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]); 
Questions connexes