c# - 在 C# 中,我可以编写一个通用函数来返回 null 或将值作为字符串返回吗?

标签 c# generics nullable

基本上我想要以下通用函数:

public string StringOrNull<T> (T value)
{
    if (value != null)
    {
       return value.ToString();
    }
    return null;
}

我知道我可以使用约束,例如 where T: class,但 T 可以是基本类型、Nullable<> 或类。有没有通用的方法来做到这一点?

编辑

事实证明我抢了枪。正如这个示例所示,这实际上工作得很好:

    class Program
    {
        static void Main(string[] args)
        {
            int i = 7;
            Nullable<int> n_i = 7;
            Nullable<int> n_i_asNull = null;
            String foo = "foo";
            String bar = null;


            Console.WriteLine(StringOrNull(i));
            Console.WriteLine(StringOrNull(n_i));
            Console.WriteLine(StringOrNull(n_i_asNull));
            Console.WriteLine(StringOrNull(foo));
            Console.WriteLine(StringOrNull(bar));


        }

        static private string StringOrNull<T>(T value)
        {
            if (value != null)
            {
                return value.ToString();
            }
            return null;
        }
    }

最佳答案

default Keyword in Generic Code

在泛型类和方法中,出现的一个问题是当您事先不知道以下内容时如何为参数化类型 T 分配默认值:

T 是引用类型还是值类型。

如果 T 是值类型,它是数值还是结构。

关于c# - 在 C# 中,我可以编写一个通用函数来返回 null 或将值作为字符串返回吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12861311/

相关文章:

c# - 可空类型是引用类型吗?

c# - EF Core 种子数据库与预定义列表的 OneToMany 关系

java - 使用父类(super class)作为泛型子类型中的类型参数

c# - 从 IEnumerable<T> 获取类型 T

.net - 带有度量单位的重载函数

c# - 为什么没有 Nullable<T>.Equals(T value) 方法?

c# - 如何将一些文本写成字节(不编码)

c# - 突出显示 RichTextBox 的当前行

javascript - 如何使用正确的大小写在 SignalR 中传递复杂对象?

java - com.sun.istack.internal.Nullable 注释和 Guice