c# - 如何在 C# 中返回空值而不是空值

标签 c# string generics

我有一个字符串数组的扩展,如果数组为 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/

相关文章:

c++ - 字符串作为参数?

typescript - 在 TypeScript 中扩展参数化接口(interface)的通用接口(interface)

c# - 在 C# 中,BitArray 获取位值的速度是否比简单的位移运算更快?

java - 为什么通过将其大小写更改为大写然后再更改为小写来比较同一个字符两次?

c# - 使用 Shdocvw 访问 Internet Explorer 会导致 UnauthorizedAccessException

c - (C 编程) 如何将字符串插入字符数组,然后打印出该数组的所有元素?

javascript - 模式名称 T |数组<T>

java - 为什么这些泛型不能在 OpenJDK7 中编译,但可以在 OpenJDK6 中编译

c# - 从 WPF 执行存储过程

c# - Azure Blob 上传时返回 403