C# 隐式运算符和 ToString()

发布于 2024-09-06 16:45:54 字数 248 浏览 9 评论 0原文

我正在创建自己的类型来表示 css 值(例如像素,例如 12px )。为了能够对我的类型和整数进行加/减/乘/...我已经在 int 之间定义了两个隐式运算符。除了一件事之外,一切都很好。如果我写:

CssUnitBase c1 = 10;
Console.WriteLine(c1);

我得到“10”而不是“10px” - 使用隐式转换为 int 而不是 ToString() 方法。我怎样才能防止这种情况发生?

I'm creating my own type for representing css values (like pixels eg. 12px ). To be able to add/subtract/multiply/... my type and ints I've defined two implicit operators to and from int. Everything works great except one thing.. If I write:

CssUnitBase c1 = 10;
Console.WriteLine(c1);

I get "10" instead of "10px" - implicit conversion to int is used instead ToString() method. How can I prevent that?

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

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

发布评论

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

评论(3

故事还在继续 2024-09-13 16:45:54

是的,存在到 int 的隐式转换,并且 WriteLine(int) 的重载比 WriteLine(object) 更具体,因此它会用那个。

您可以显式调用WriteLine(object)重载:

Console.WriteLine((object)c1);

...或者您可以自己调用ToString,以便Console.WriteLine (string) 被调用:

Console.WriteLine(c1.ToString());

...或者您可以删除到 int 的隐式转换。它对你有多大用处?我通常不赞成对此类事情进行隐式转换...(当然,如果您真的愿意,您可以保留 from int 的隐式转换。 )

Yes, there's an implicit conversion to int and the overload of WriteLine(int) is more specific than WriteLine(object), so it'll use that.

You could explicitly call the WriteLine(object) overload:

Console.WriteLine((object)c1);

... or you could call ToString yourself, so that Console.WriteLine(string) is called:

Console.WriteLine(c1.ToString());

... or you could just remove the implicit conversion to int. Just how useful is it to you? I'm generally not in favour of implicit conversions for this sort of thing... (You could keep the implicit conversion from int of course, if you really wanted to.)

泛泛之交 2024-09-13 16:45:54

重写“ToString()”方法并使用 c1.ToString()。

Override the "ToString()" method and use c1.ToString().

万劫不复 2024-09-13 16:45:54

只需重写 CssUnitBase 中的 ToString 方法,并在需要将其作为字符串时调用该方法即可。

Just override the ToString method in CssUnitBase and call that when you want it as a string.

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