【发布时间】:2018-09-10 12:36:37
【问题描述】:
我对 C#.NET 中的运算符重载有点困惑
请检查以下示例
public enum TestActionResult
{
NoResult,
Fail,
Pass,
Exception
}
TestActionResult result = DetailsScreen.Text.Contains("YOUR DETAILS", StringComparison.OrdinalIgnoreCase) && DetailsScreen.Enabled && DetailsScreen.Displayed;
我希望发生的事情:
我想自动将boolean 值转换为TestActionResult。
因此,如果我的结果对象右侧的布尔值为真,那么我希望 TestActionResult 在 False 的情况下推断通过或失败。
我知道你可以在 C# 中进行运算符重载,我很确定这是可能的,但我不熟悉它是如何工作的。
我确实对此有所了解,但事实证明这是错误的xD
public static TestActionResult operator == (bool b1, bool b2)
{
if(b1 && b2)
{
return TestActionResult.Pass;
}
return TestActionResult.Fail;
}
public static TestActionResult operator !=(bool b1, bool b2)
{
if(!(b1 && b2))
{
return TestActionResult.Pass;
}
return TestActionResult.Fail;
}
任何帮助将不胜感激
我知道我可以使用三元操作数,但是对我来说它经常使代码行膨胀,我希望它采用更时尚的格式
例如
result = !bodyElement.GetAttribute("class").Contains("popup-visible") ? TestActionResult.Pass : TestActionResult.Fail;
这太长了,如果我可以通过运算符重载来减少它,我将非常感谢您的输入
【问题讨论】:
-
在 C# 中似乎无法实现枚举运算符重载。 -> stackoverflow.com/questions/1355817/…
-
您想在哪里添加这些运算符?你可以创建一个
struct TestActionResult,它有一个属性ActionResult Result(这是你的枚举)。然后你可以在那里添加bool隐式运算符(或/和true/false运算符)。 -
嗨蒂姆,我现在可以在任何地方添加这些操作数,你能给我一个小例子吗?
-
@JohnAntonyDanielNolan 对 bool 进行扩展怎么样。 bool.ToEnum() 即 ??
-
哦,这很有趣,我对扩展非常熟悉,可以考虑创建一个扩展,根据布尔值给我一个 TestActionResult,如果我找不到解决方案,我会回到这个适合的问题谢谢!