在c#中是否有更简单的方法来做到这一点?(空合并型问题)

本文关键字:这一点 问题 合并型 是否 更简单 方法 | 更新日期: 2023-09-27 17:49:51

有没有更简单的方法?

string s = i["property"] != null ? "none" : i["property"].ToString();

注意到它和null-coalesce(??)之间的区别在于非空值(??的第一个操作数)Op)在返回之前被访问。

在c#中是否有更简单的方法来做到这一点?(空合并型问题)

试试下面的

string s = (i["property"] ?? "none").ToString();

如果indexer返回object:

(i["property"] ?? (object)"none").ToString()

或只是:

(i["property"] ?? "none").ToString()

如果string:

i["property"] ?? "none"

有趣的选择。

void Main()
{
 string s1 = "foo";
 string s2 = null;
 Console.WriteLine(s1.Coalesce("none"));
 Console.WriteLine(s2.Coalesce("none"));
 var coalescer = new Coalescer<string>("none");
 Console.WriteLine(coalescer.Coalesce(s1));
 Console.WriteLine(coalescer.Coalesce(s2));
}
public class Coalescer<T>
{
    T _def;
    public Coalescer(T def) { _def = def; }
    public T Coalesce(T s) { return s == null ? _def : s; }
}
public static class CoalesceExtension
{
    public static string Coalesce(this string s, string def) { return s ?? def; }
}