У меня есть расширение для строковых массивов, которое возвращает пустую строку, если массив равен нулю, если длина массива == 1, он возвращает первый элемент, в противном случае возвращается элемент в позиции индекса, проверка границ не выполняется.
public static Strings IndexOrDefault(this String[] arr, Int32 index)
{
if (arr == null)
return String.Empty;
return arr.Length == 1 ? arr[0] : arr[index];
}
Теперь мне нужно расширить эту функциональность на другие массивы, поэтому я подумал, что этот метод расширения может справиться с работой
public static T IndexOrDefault<T>(this T[] arr, Int32 index)
{
if (arr == null)
return default(T);
return arr.Length == 1 ? arr[0] : arr[index];
}
И все было в порядке, за исключением того, что default (String) не String.Emptyно ноль.Так что теперь я возвращаю нули для строк, что было первым требованием ...
Есть ли замена по умолчанию, которая могла бы возвращать пустое родовое значение вместо нуля?
Edit 2 : (первым было определение)
Сейчас я использую этот подход, который работает, но он не так элегантен, как я хотел (ну, метод тоже не элегантный), но решение могло бы :))
public static T IndexOrDefault<T>(this T[] arr, Int32 index)
{
if (arr == null)
return default(T);
return arr.Length == 1 ? arr[0] : arr[index];
}
public static String IndexOrDefault(this String[] arr, Int32 index)
{
if (arr == null)
return String.Empty;
return arr.Length == 1 ? arr[0] : arr[index];
}
Два разных метода, один для String и универсальный для остальных.