C# NET中数组上的泛型函数
我经常在C#中定期使用int/float数组和其他东西,因为它们比List更快(可能?)。目前,我已经为每种类型实现了几十个函数:C# NET中数组上的泛型函数,c#,.net,arrays,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
/// <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;
}
//
///检查数组是否包含给定值。
///
公共静态bool包含(int[]值,int值){
for(int s=0,sl=values.Length;s
有没有一种方法可以以通用的方式实现这些功能?或者,只有在我使用
列表的情况下才可以这样做?谢谢@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;
}
感谢@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;
}
System.Array
类型有一个令人眼花缭乱的静态方法数组,可以帮助您搜索、排列、排序数组。你绝对不需要自己动手。这些静态方法(如Find
,FindAll
)也接受泛型参数。以下是借助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](...
System.Array
类型有一个令人眼花缭乱的静态方法数组,可以帮助您搜索、排列、排序数组。你绝对不需要自己动手。这些静态方法(如Find
,FindAll
)也接受泛型参数。以下是借助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](...
您使用的是什么版本的.NET?林克有这方面的报道。”(也许?)?你不确定吗?你真的应该首先进行测试和基准测试。你做的任何通用的测试都会比较慢。如果您关心数组和列表(非常小)之间的差异,您就不想处理泛型化的速度减慢(只比次整数稍慢)。@Servy泛型版本会以什么方式变慢?每个泛型函数都是根据它所使用的类型进行JIT的,所以它应该和非泛型版本一样快。除了jitting上的最小差异之外。@Rogerasing一般来说,您是正确的,但是在处理数字类型的特定情况下,您不能添加任何通用约束(因为数字类型的大部分功能没有接口),以公开它们的大部分功能。您将使用object.Equals
来比较元素,或者更糟糕的是,使用Func
来确定相等性,这将比将参数键入为int
和使用运算符==
要慢。您使用的是.NET的哪个版本?林克有这方面的报道。”(也许?)?你不确定吗?你真的应该首先进行测试和基准测试。你做的任何通用的测试都会比较慢。如果您关心数组和列表(非常小)之间的差异,您就不想处理泛型化的速度减慢(只比次整数稍慢)。@Servy泛型版本会以什么方式变慢?每个泛型函数都是根据它所使用的类型进行JIT的,所以它应该和非泛型版本一样快。除了jitting上的最小差异之外。@Rogerasing一般来说,您是正确的,但是在处理数字类型的特定情况下,您不能添加任何通用约束(因为数字类型的大部分功能没有接口),以公开它们的大部分功能。您将使用object.Equals
来比较元素,或者更糟糕的是,使用Func
来确定相等性,这将比将参数键入为int
和使用运算符==
要慢。这将无法很好地处理null
对象。。。(除非添加一个其中T:struct
)如果使用静态对象。等于(a,b)
它会处理这个问题。@Kek添加一个其中T:struct
通用约束!;)@Geotarget将进行参考比较,而不是值比较,因为无约束的T
相当于对象
@Servy,您是对的。。。这不是完美的代码,但添加where T结构似乎有点限制。我想这取决于它的名字。我会让OP定制这个code@Kek请参阅我的编辑。只需使用object.Equals(a,b)
而不是a.Equals(b)
,空检查将得到正确处理。这不会很好地处理null
对象。。。(除非添加一个其中T:struct
)如果使用静态对象。等于(a,b)
它会处理这个问题。@Kek添加一个其中T:struct
通用约束!;)@Geotarget将进行参考比较,而不是值比较,因为无约束的T
相当于对象
@Servy,您是对的。。。这不是完美的代码,但添加where T结构似乎有点限制。我想这取决于它的名字。我会让OP定制这个code@Kek请参阅我的编辑。只要使用object.Equals(a,b)
而不是a.Equals(b)
,空检查就会得到正确处理。你把20个函数称为一个令人眼花缭乱的数组?(如果他看到了我的收藏该怎么办!)我更关注的是“数组”的双关语,而不是方法计数;)你把20个函数称为一个令人眼花缭乱的数组?(如果他看到了我的收藏该怎么办!)我更关注的是“数组”的双关语,而不是方法计数;)