2010-05-19 7 views
0

Qu'est-ce que le travail de logique natif derrière public static void Reverse (Array array, int index, int longueur);Logique derrière la méthode Array.Reverse()

+1

Avec deux réponses correctes à ce sujet, tout ce qui me reste est de suggérer ".NET Reflector" à vous ... avec cet outil, vous pouvez démonter cette méthode par vous-même. (Ou vous pouvez télécharger les sources .NET) – Hinek

Répondre

2

boucle à partir du point de départ, index, au milieu de la plage, index + length/2, en échangeant chaque array[i] avec array[index + length - i - 1].

5

Vous pouvez utiliser .NET Reflector pour que:

[ReliabilityContract(Consistency.MayCorruptInstance, Cer.MayFail)] 
public static void Reverse(Array array, int index, int length) 
{ 
    if (array == null) 
    { 
     throw new ArgumentNullException("array"); 
    } 
    if ((index < array.GetLowerBound(0)) || (length < 0)) 
    { 
     throw new ArgumentOutOfRangeException((index < 0) ? "index" : "length", Environment.GetResourceString("ArgumentOutOfRange_NeedNonNegNum")); 
    } 
    if ((array.Length - (index - array.GetLowerBound(0))) < length) 
    { 
     throw new ArgumentException(Environment.GetResourceString("Argument_InvalidOffLen")); 
    } 
    if (array.Rank != 1) 
    { 
     throw new RankException(Environment.GetResourceString("Rank_MultiDimNotSupported")); 
    } 
    if (!TrySZReverse(array, index, length)) 
    { 
     int num = index; 
     int num2 = (index + length) - 1; 
     object[] objArray = array as object[]; 
     if (objArray == null) 
     { 
      while (num < num2) 
      { 
       object obj3 = array.GetValue(num); 
       array.SetValue(array.GetValue(num2), num); 
       array.SetValue(obj3, num2); 
       num++; 
       num2--; 
      } 
     } 
     else 
     { 
      while (num < num2) 
      { 
       object obj2 = objArray[num]; 
       objArray[num] = objArray[num2]; 
       objArray[num2] = obj2; 
       num++; 
       num2--; 
      } 
     } 
    } 
} 

TrySZReverse est une méthode native qui peut parfois faire la même chose que plus rapide.

Questions connexes