Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在这种情况下重写ToString()方法可以吗_C#_.net_Overriding_Tostring - Fatal编程技术网

C# 在这种情况下重写ToString()方法可以吗

C# 在这种情况下重写ToString()方法可以吗,c#,.net,overriding,tostring,C#,.net,Overriding,Tostring,我需要能够检索对象的字符串版本 例如,以下搜索条件应提供“搜索参数:FromDate:{0},ToDate{1},…” 但从我读到的其他线程来看,由于性能问题,不建议对长字符串使用ToString()。我想知道是否可以这样使用,或者我应该考虑使用私有方法。< /P> 编辑 此字符串表示在业务逻辑中使用,不用于调试目的。来自: “返回表示当前对象的字符串。” 如果要创建一个表示对象的字符串,则该字符串就是位置 所以-是的 编辑: “此字符串表示形式在业务逻辑中使用,不用于调试目的。” int的字符

我需要能够检索对象的字符串版本

例如,以下
搜索条件应提供“
搜索参数:FromDate:{0},ToDate{1},…

但从我读到的其他线程来看,由于性能问题,不建议对长字符串使用ToString()。我想知道是否可以这样使用,或者我应该考虑使用私有方法。< /P> 编辑

此字符串表示在业务逻辑中使用,不用于调试目的。

来自: “返回表示当前对象的字符串。”

如果要创建一个表示对象的字符串,则该字符串就是位置

所以-是的

编辑: “此字符串表示形式在业务逻辑中使用,不用于调试目的。”

int
的字符串表示形式也用于业务逻辑。问题是,该字符串表示法是该业务逻辑的特定表示法,还是您在业务逻辑中使用的该对象的一般表示法

如果它特定于特定的业务逻辑,那么字符串的生成应该是该业务逻辑的一部分

如果不是,但该对象有许多可选的字符串表示形式,您可能需要实现,它定义了一个
ToString
方法,该方法获取
IFormatProvider
并将字符串格式化为参数


否则,常规的
ToString
就是您的朋友。

是的,绝对重写
ToString()
以返回最有意义的信息

我认为过长的字符串可能会导致一些问题,并且不太有用。例如,较长的字符串在监视窗口中没有空间,可能需要考虑其他因素。因此,我会寻找一种方法来缩短输出,并且仍然是有意义的


但无论如何,重写
ToString()
,这样您自己的类型就可以返回有意义的信息。

与其担心
ToString()
的性能,不如关注可读性和预期行为

我一直使用
ToString()
实现对象的用户友好显示。也就是说,即使调用者对我的类一无所知(比如,写入日志或在控制台上,甚至在UI中显示),我也总是希望对象如何显示

对于特定于操作的实现,我将实现另一个函数,但遵循类似的命名模式。比如说,
ToFormattedQueryString()


下面是关于
ToString()的经验法则的一个很好的讨论:

如果您关心性能,可以将字段添加到类中以存储字符串,然后将代码添加到每个属性的
set
,以在该点重新计算字符串。然后,
ToString()
就可以有效了

就我个人而言,我认为所有时间(可能永远不会使用)重新计算该字符串所产生的额外代码和开销将无法证明更改的合理性

我要建议的是,既然性能是您最关心的问题,那么就按照您希望的方式编写代码,以您认为更清晰、最易于维护的方式编写代码,然后让一个探查器工具告诉您需要返回并优化的位置。

当然可以。从这个意义上说,尿裤子是“好的”。持续5秒钟,天气温暖,舒缓的感觉很棒。但是你需要干净的裤子

从某种意义上说,它与松散的打字非常相似,这是不正常的ToString的实现在框架中的对象上有很大的不同,在所有不同的工具和业务开发人员创建的对象上更为具体


我的2美分:给它一个描述性的名称,因为很可能以后你会需要同一个对象的另一个字符串表示。如果您开发了一个API,那么它的可读性会更高,并且以后对您的可读性也会更高

这就是toString的用途,它在被调用时会被评估,所以没有性能问题如果你没有十几个无关的东西询问这些对象的字符串表示,那么它就不重要了。
public class SearchCriteria
{
  public string FromDate {get;set;}
  public string ToDate {get;set;}
  public string FromAge {get;set;}
  public string ToAge {get;set;}

  //other 10 properties
}