【问题标题】:C# best way to call .ToString() on an objectC# 在对象上调用 .ToString() 的最佳方法
【发布时间】:2009-10-08 16:31:33
【问题描述】:

如何在可以为 null 的 object 类型的对象上编写对 .ToString() 方法的调用。我目前正在执行以下操作,但它很长:

  myobject == null ? null : myobject.ToString()

【问题讨论】:

    标签: c# rewrite


    【解决方案1】:

    使行为更加封装的一种方法是将其放入扩展方法中:

    public static class ObjectExtensions
    {
        public static string NullSafeToString(this object input)
        {
            return  input == null ? null : input.ToString();
        }
    }
    

    然后你可以在任何对象上调用NullSafeToString

    object myobject = null;
    string temp = myobject.NullSafeToString();
    

    【讨论】:

    • 所以使用扩展方法,您可以在空引用上调用方法!很奇怪,但它解决了我的问题!
    • 你可能不知道在所有情况下将空对象转换为空字符串是否合适,我认为添加一个采用默认值的重载是合理的。
    • @Duaner:这并不像看起来那么奇怪;它只是语法糖。我示例中的调用myobject.NullSafeToString() 将由编译器翻译成ObjectExtensions.NullSafeToString(myobject)
    【解决方案2】:

    如果您经常以这种方式使用该特定类型,您可以编写一个方法GetString(object foo),它将返回一个字符串或空值。这将为您节省一些打字时间。 C# 中是否有类似于 C++ 模板的东西?如果是,您也可以将其应用于GetString() 方法。

    【讨论】:

    • 我经常使用它,但来自墙壁项目的不同部分,所以我需要调用 Tools.GetString() 之类的东西。那会更好。但是有没有不需要调用方法的语法?
    【解决方案3】:

    你确定你想要一个空对象的空字符串吗?我认为这更有可能:

    myobject == null ? string.Empty : myobject.ToString()
    

    这并没有直接错误,但我记得一些准则,其中函数应该接受 null 和 Empty,但最好不要返回 null 字符串。

    【讨论】:

    • 是的,null 时我需要一个 null。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-19
    • 1970-01-01
    • 1970-01-01
    • 2013-05-23
    • 1970-01-01
    • 2014-12-29
    相关资源
    最近更新 更多