Предполагая, что верно следующее:
valueToCompare
- это массив ссылочных типов (не, скажем, int[]
или DateTime[]
)
- Массив, который
valueToCompare
является одномерным (поэтому либо объявляется как одномерный массив, либо как зубчатый массив)
Вы можете привести непосредственно к object[]
вместо Array
.
bool Compare(object valueToCompare)
{
Type t = valueToCompare.GetType();
if(t.IsArray() && !t.GetElementType().IsValueType && t.GetRank() == 1)
{
foreach(var value in (valueToCompare as object[]))
return Compare(value);
}
else
{
return Compare(valueToCompare);
}
}
Если ваш массив имеет типы значений, то вам в основном не повезло.
Если ваш массив многомерный, то вам просто нужно написать аналогичные проверки, чтобы учесть столько измерений, сколько вы хотите поддерживать.
ПРИМЕЧАНИЕ: Как вы уже написали, эта функция будет просто вызывать себя рекурсивно (ветвь else
вызывает себя с теми же параметрами) и в итоге приведет к StackOverflowException
. Я не верю, что это то, что вы намеревались сделать, но я оставил это как есть, так как я не знаю, что вы на самом деле хотели сделать.
Кроме того, на самом деле это не скомпилируется. Я не уверен, что ваш цикл предназначен для сравнения; как таковой, он будет просто сравниваться с первым элементом массива, но если массив пуст, он не будет возвращать значение (отсюда ошибка компиляции).
Что вы пытаетесь сделать здесь?