gpt4 book ai didi

c# - 我可以/应该使用隐式运算符而不是覆盖 ToString 吗?

转载 作者:可可西里 更新时间:2023-11-01 08:21:54 24 4
gpt4 key购买 nike

我有一个类,我想轻松地写出字符串(例如,用于记录目的)。我可以使用隐式运算符将对象隐式转换为字符串而不是重写 ToString 方法吗?

例如,我有一个包含姓名年龄Person类:

public class Person
{
public string Name { get; set; }
public int Age { get; set;}
}

我可以覆盖ToString:

public override string ToString()
{
return String.Format("Name: {0}, Age: {1}", this.Name, this.Age);
}

或者我可以使用隐式运算符:

public static implicit operator string(Person p)
{
return String.Format("Name: {0}, Age: {1}", p.Name, p.Age);
}

现在,当将此对象传递给需要字符串的方法时,而不是

Log(Person.ToString());

我可以打电话

Log(Person);

我什至可以在隐式转换中调用重写的 ToString

public static implicit operator string(Person p)
{
return p.ToString();
}


这是对隐式运算符转换为 String 的错误使用吗?需要此功能时的最佳做法是什么?我怀疑仅重载 ToString 将是最佳实践答案,如果是这样,我有几个问题:

  1. 我什么时候会使用到 String 的隐式转换?
  2. 使用隐式转换为 String 的最佳实践示例是什么?

最佳答案

使用 ToString,考虑让记录器本身可以查询类型以从对象构造有用的字符串表示形式(甚至转换为 JSON 也可能有效)。

覆盖 ToSTring 是生成“仅显示”版本实例的预期方式。

当对象以某种方式与目标类型兼容时,应使用隐式转换。 IE。您可能拥有代表“LastName”的类型并拥有一些特殊方法,但对于大多数实际用途而言,它是一个字符串。 Person 感觉绝对不是string 所以隐式转换会让后面看代码的人大吃一惊。

注意 MSDN 关于 implicit 的建议:

Use it to enable implicit conversions between a user-defined type and another type, if the conversion is guaranteed not to cause a loss of data.

关于c# - 我可以/应该使用隐式运算符而不是覆盖 ToString 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26558829/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com