У меня есть большая коллекция объектов разных встроенных типов, например. int, bool [], double [] и т. д.C# - как применять различные общие методы для T и T []
На объекте M Я хотел выполнить операцию MyMethod один раз с каждым элементом коллекции. Тем не менее, мне нужно было выполнить различные операции с массивами и разные с одиночными значениями.
Во-первых, я попробовал:
public void MyMethod<T>(T value)
public void MyMethod<T>(T[] array)
, но затем, первый метод был применен с каждым элементом коллекции, в том числе массивов.
Моя следующая попытка была:
public void MyMethod<T>(T value) where T : struct
public void MyMethod<T>(T[] array)
И это был следующий эффект, когда я попытался вызвать этот метод:
Error 8 The type 'T' must be a non-nullable value type in order to use it as parameter 'T' in the generic type or method 'MyMethod(T)'
Похоже, что компилятор не видит MyMethod (T [] массив) способ. Где я ошибаюсь?
Наконец, я представил вспомогательный метод:
public void MyAux<T>(T value) {
if (value.GetType().IsArray) {
this.MyMethodForArray(value);
}
else {
this.MyMethodForSingleValue(value);
}
, но потом я получил ошибку:
Error 8 The type arguments for method 'MyMethodForArray(T[])' cannot be inferred from the usage. Try specifying the type arguments explicitly.
Как справиться с этой проблемой элегантно?
Я просто попытался тиражирование то же самое, но функции вызывается правильно (т.е. массив Обобщенные методы массивов, передаваемых и обычной версии для аргументов, не являющихся массивами.) – Chandu 2010-12-16 14:56:31
Ваш первый подход должен работать нормально – 2010-12-16 14:59:25