【发布时间】:2022-01-21 03:02:21
【问题描述】:
我有一个方法,它采用任意类型的数组。我有一个对象数组(在我的例子中,这是一个带变量的类)。然后我把我的对象数组放在这个方法中。那么如何使用这个对象中的变量呢?
public class C // This one of my classes
{
public int I { get; set; }
}
public static void Sort<T>(T[] array, string name) // Here i put my class as argument
{
...
Array.Sort<T>(array, (a, b) => a.I.CompareTo(b.I)); // Here "I" is some variable in my class, which i need to use
...
}
static void Main(string[] args) // Here i create an array of classes
{
...
C[] classes = new C[100000];
Sort(classes);
...
}
【问题讨论】:
-
如果您传入
string[]或任何其他类型的数组,您希望它如何工作?如果您只需要Sort方法与C[]一起使用,请不要使其通用... -
他们都可以实现一个暴露该 int 的接口吗?然后你可以有一个
IHaveAnInt实例数组 -
是的,一个接口作为去这里的方式。
-
或在类上实现 IComparable 并具有类型约束,例如 where T:IComparable 然后您可以执行 a.CompareTo(b) 并且“I”成员成为 IComparable 的实现细节.实际上,如果该类实现 IComparable 您可能只需执行 .Sort() 就可以了
-
Array.Sort方法可以将IComparer<T>作为参数。不要让你的类型实现IComparable,而是创建一个知道如何比较你的类型的第二种类型。创建具有 int 属性 getter 的IHaveAnInt接口(我在上面制作的)。让您的所有类型都实现该接口。创建一个实现IComparer<IHaveAnInt>的类型,该类型了解如何比较两个 IHaveAnInts。将该类型的实例传递给Array.Sort