我有一个字符串数组的扩展,如果数组为 null,它返回一个空字符串,如果数组长度为 == 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 而是 null。所以我现在要为字符串返回空值,这是第一个要求...
是否有 default 的替代品可以返回一个空的通用值而不是 null?
编辑 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];
}
两种不同的方法,一种用于字符串,一种用于其余的通用方法。
最佳答案
除了引用类型的 null 和值类型的 0 的一些变体之外,没有通用默认值
你可以很容易地提供一个
public static T IndexOrDefault<T>(this T[] arr, Int32 index, T theDefaultValue)
{
if (arr == null)
return theDefaultValue;
return arr.Length == 1 ? arr[0] : arr[index];
}
public static T IndexOrDefault<T>(this T[] arr, Int32 index, Func<T> defaultFactory)
{
if (arr == null)
return defaultFactory();
return arr.Length == 1 ? arr[0] : arr[index];
}
关于c# - 如何在 C# 中返回空值而不是空值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6576814/