.net 您希望在通用ToString函数中看到什么?

.net 您希望在通用ToString函数中看到什么?,.net,.net,假设您有一个名为“SafeToString”的通用函数。这样做的目的是能够传递任何信息,并且总是能够毫无例外地得到正常的响应。您希望它如何响应这些输入 Null->Null或字符串。空 DBNull.Value->Null、String.Empty或类似“”的文本 包含null->null、String.Empty或类似“”的文本的Nullable FSharpOption包含None->Null、String.Empty或“None” 包含一些(5)->“5”或“一些(5)”的选项 可以使用

假设您有一个名为“SafeToString”的通用函数。这样做的目的是能够传递任何信息,并且总是能够毫无例外地得到正常的响应。您希望它如何响应这些输入

  • Null->Null或字符串。空
  • DBNull.Value->Null、String.Empty或类似“”的文本
  • 包含null->null、String.Empty或类似“”的文本的Nullable
  • FSharpOption包含None->Null、String.Empty或“None”
  • 包含一些(5)->“5”或“一些(5)”的选项

可以使用扩展方法实现此功能。扩展方法可以很好地处理空输入参数


是的,我同意ToString导致的NullReferenceException在日志功能中非常烦人。

可以使用扩展方法实现此功能。扩展方法可以很好地处理空输入参数


是的,我同意ToString导致的NullReferenceException在日志功能中非常烦人。

我认为能够区分不同种类的null/empty值很重要。所以我喜欢这样的东西:

  • 空->“空”
  • DBNull.Value->“DBNull”,或者如果您重视区分值与类名称的能力,则可以选择“DBNull.Value”
  • Nullable包含null->
    “null”
    。Nullables与普通nulls的不同之处在于它们有一个与之关联的类型,了解这一点可能很有用
  • FSharpOption无->“无”
  • FSharpOption Some(5)->“Some(5)”,正如F#通常所做的那样,特别感谢Grauenwolf对此的检查

我认为能够区分不同类型的空/空值很重要。所以我喜欢这样的东西:

  • 空->“空”
  • DBNull.Value->“DBNull”,或者如果您重视区分值与类名称的能力,则可以选择“DBNull.Value”
  • Nullable包含null->
    “null”
    。Nullables与普通nulls的不同之处在于它们有一个与之关联的类型,了解这一点可能很有用
  • FSharpOption无->“无”
  • FSharpOption Some(5)->“Some(5)”,正如F#通常所做的那样,特别感谢Grauenwolf对此的检查

    • 这不是回答你的问题,请原谅。但您必须始终在对象上使用
      Convert.ToString()
      ,以避免出现异常。例如:

      string x = null;
      string a = x.ToString(); // throws exception
      
      string b = Convert.ToString(x); // this is fine 
      

      这并没有回答你的问题,所以请原谅我。但您必须始终在对象上使用
      Convert.ToString()
      ,以避免出现异常。例如:

      string x = null;
      string a = x.ToString(); // throws exception
      
      string b = Convert.ToString(x); // this is fine 
      

      哦,是的,这当然是一种扩展方法。问题更多的是,如果你要使用它,你希望看到什么。哦,是的,当然这是一种扩展方法。问题更多的是,如果你想使用它,你希望看到什么。如果你想使用它来填充GUI或打印报告,你还想这样做吗?我仔细检查了一下,FSharpOption.ToString在beta 2中会使用“Some(5)”@Steven,当您将该信息传递给函数时,您将丢失该信息。@Grauenwolf:如果我将空字符串传递给接受对象的函数,则为“是”。但是,如果我传递了一个为null的
      int?
      ,就会出现这种情况。我想,更一般地说,如果我将null子引用传递给接受基类引用的方法,它将无法区分这与传递null基类引用。再说一次,我不知道我们是否想要它。如果你用它来填充GUI或打印报告,你还想这样做吗?我仔细检查了一下,beta 2中的FSharpOption.ToString将使用“Some(5)”@Steven,当您将该信息传递给函数时,您将丢失该信息。@Grauenwolf:如果我将空字符串传递给接受对象的函数,则为“是”。但是,如果我传递了一个为null的
      int?
      ,就会出现这种情况。我想,更一般地说,如果我将null子引用传递给接受基类引用的方法,它将无法区分这与传递null基类引用。再说一次,我不知道我们会想要它。