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

发布于 2024-10-31 19:02:33 字数 187 浏览 0 评论 0原文

有没有更简单的方法来做到这一点?

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

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

Is there an easier way to do this?

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

notice the difference between it and null-coalesce (??) is that the not-null value (first operand of ?? op) is accessed before returning.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

青春如此纠结 2024-11-07 19:02:33

尝试以下操作

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

Try the following

string s = (i["property"] ?? "none").ToString();
俏︾媚 2024-11-07 19:02:33

如果索引器返回对象

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

或只是:

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

如果字符串

i["property"] ?? "none"

If indexer returns object:

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

or just:

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

If string:

i["property"] ?? "none"
我乃一代侩神 2024-11-07 19:02:33

有趣的替代品。

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; }
}

Alternatives for fun.

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; }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文