gpt4 book ai didi

c# - 支持转换为 bool 值,但仍使用 ToString 显示 WriteLine

转载 作者:太空狗 更新时间:2023-10-29 22:03:37 25 4
gpt4 key购买 nike

当我运行这段代码时,Equation(10, 20) 会输出到控制台:

public class Equation
{
public int a;
public int b;

public override string ToString()
{ return "Equation(" + a + ", " + b + ")"; }
}

class Program
{
static void Main(string[] args)
{
Console.WriteLine(new Equation() { a = 10, b = 20 });

Console.ReadLine();
}
}

我想支持在 if 测试中使用的 Equation 实例,所以我允许隐式转换为 Boolean:

public class Equation
{
public int a;
public int b;

public override string ToString()
{ return "Equation(" + a + ", " + b + ")"; }

public static implicit operator Boolean(Equation eq)
{ return eq.a == eq.b; }
}

class Program
{
static void Main(string[] args)
{
if (new Equation() { a = 10, b = 10 })
Console.WriteLine("equal");

Console.WriteLine(new Equation() { a = 10, b = 20 });

Console.ReadLine();
}
}

但是,问题是,现在当我在 Equation 上使用 WriteLine 时,它被转换为 Boolean 而不是使用 ToString.

如何允许隐式转换为 Boolean 并仍然使用 ToString 显示 WriteLine


更新

这道题的灵感来自于SymbolicC++中的Equation类。 .下面的代码说明了 Equation 可以通过 cout 显示,也可以用于 if 的测试:

auto eq = x == y;

cout << eq << endl;

if (eq)
cout << "equal" << endl;
else
cout << "not equal" << endl;

所以这在 C++ 中是可能的。

最佳答案

据我所知,你不能。您可以提供到字符串的转换...但这会使 WriteLine(string)WriteLine(bool` ).

就我个人而言,我强烈建议您放弃对Boolean 的隐式转换。隐式转换几乎总是不是一个好主意。它们使代码更加困惑,并导致您发现的意外过载更改。

(我也会改变你的支撑方式,但那是另一回事。)

关于c# - 支持转换为 bool 值,但仍使用 ToString 显示 WriteLine,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14080279/

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