.NET中的数组上的通用函数

时间:2012-12-03 15:31:26

标签: c# .net arrays

我经常在C#中使用int / float和其他东西的数组,因为它们比List更快(可能是?)。目前我已经为每种类型实现了许多功能:

/// <summary>
/// Checks if the array contains the given value.
/// </summary>
public static bool contains(int[] values, int value) {
    for (int s = 0, sl = values.Length; s < sl; s++) {
        if (values[s] == value) {
            return true;
        }
    }
    return false;
}
/// <summary>
/// Checks if the array contains the given value.
/// </summary>
public static bool contains(float[] values, float value) {
    for (int s = 0, sl = values.Length; s < sl; s++) {
        if (values[s] == value) {
            return true;
        }
    }
    return false;
}

有没有办法以通用方式实现这些?或者只有在我使用List<T>

时才可以

2 个答案:

答案 0 :(得分:3)

System.Array类型有一系列令人眼花缭乱的静态方法,可以帮助您搜索,排列,排序等数组。你绝对不需要自己动手。这些静态方法(如FindFindAll)也接受泛型参数。这是列表,借助PowerShell转储:

Name                           Definition                    
----                           ----------                    
AsReadOnly                     static System.Collections.... 
BinarySearch                   static int BinarySearch(ar... 
Clear                          static void Clear(array ar... 
ConstrainedCopy                static void ConstrainedCop... 
ConvertAll                     static TOutput[] ConvertAl... 
Copy                           static void Copy(array sou... 
CreateInstance                 static array CreateInstanc... 
Equals                         static bool Equals(System.... 
Exists                         static bool Exists[T](T[] ... 
Find                           static T Find[T](T[] array... 
FindAll                        static T[] FindAll[T](T[] ... 
FindIndex                      static int FindIndex[T](T[... 
FindLast                       static T FindLast[T](T[] a... 
FindLastIndex                  static int FindLastIndex[T... 
ForEach                        static void ForEach[T](T[]... 
IndexOf                        static int IndexOf(array a... 
LastIndexOf                    static int LastIndexOf(arr... 
ReferenceEquals                static bool ReferenceEqual... 
Resize                         static void Resize[T]([ref... 
Reverse                        static void Reverse(array ... 
Sort                           static void Sort(array arr... 
TrueForAll                     static bool TrueForAll[T](... 

答案 1 :(得分:2)

感谢@Servy的更正:

/// <summary>
/// Checks if the array contains the given value.
/// </summary>
public static bool Contains<T>(T[] values, T value) {
    for (int s = 0, sl = values.Length; s < sl; s++) {
        if (object.Equals(values[s].value)) {
            return true;
        }
    }
    return false;
}

对于这类事情,您也可以使用Linq:

using System.Linq;
...
var myArray = new float[12];
...
if(myArray.Any(a => a == 2.4))