C# 枚举的重载运算符
我对C#NET中的运算符重载有点迷惑不解 请检查以下示例C# 枚举的重载运算符,c#,operator-overloading,C#,Operator Overloading,我对C#NET中的运算符重载有点迷惑不解 请检查以下示例 public enum TestActionResult { NoResult, Fail, Pass, Exception } TestActionResult result = DetailsScreen.Text.Contains("YOUR DETAILS", StringComparison.OrdinalIgnoreCase) && DetailsScreen.Enabled
public enum TestActionResult
{
NoResult,
Fail,
Pass,
Exception
}
TestActionResult result = DetailsScreen.Text.Contains("YOUR DETAILS", StringComparison.OrdinalIgnoreCase) && DetailsScreen.Enabled && DetailsScreen.Displayed;
我希望发生的事情:
我想自动将布尔值
转换为测试结果
因此,如果我的结果对象右侧的布尔值为true,那么我希望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;
}
任何帮助都将不胜感激
我知道我可以使用三元操作数,但对我来说,它经常会使代码行膨胀,我希望这是一种更流畅的格式
e、 g
这太长了,如果我可以用操作符重载来减少它,如果你覆盖操作符两个bool,我会非常感谢你的输入。这些运算符适用于您的项目 我认为这是最简单的
TestActionResult result = DetailsScreen.Text.Contains("YOUR DETAILS", StringComparison.OrdinalIgnoreCase) && DetailsScreen.Enabled && DetailsScreen.Displayed
? TestActionResult.Pass
: TestActionResult.Failed;
或者是布尔的延伸
public static bool ToEnum(this bool value) {
return value ? TestActionResult.Pass : TestActionResult.Failed;
}
然后
如果您为2个布尔重写运算符。这些运算符适用于您的项目 我认为这是最简单的
TestActionResult result = DetailsScreen.Text.Contains("YOUR DETAILS", StringComparison.OrdinalIgnoreCase) && DetailsScreen.Enabled && DetailsScreen.Displayed
? TestActionResult.Pass
: TestActionResult.Failed;
或者是布尔的延伸
public static bool ToEnum(this bool value) {
return value ? TestActionResult.Pass : TestActionResult.Failed;
}
然后
你在C#。您可以将此enum
作为属性保存在类
或struct
中,该类隐式转换为bool
,反之亦然:
public enum ActionResult
{
NoResult,
Fail,
Pass,
Exception
}
public struct TestActionResult
{
public TestActionResult(ActionResult initialResult)
{
Result = initialResult;
}
private static readonly TestActionResult PassResult = new TestActionResult { Result = ActionResult.Pass };
private static readonly TestActionResult FailResult = new TestActionResult { Result = ActionResult.Fail };
public ActionResult Result { get; private set; }
public static implicit operator TestActionResult(bool b)
{
return b ? PassResult : FailResult;
}
public static implicit operator bool(TestActionResult tar)
{
return tar.Result == ActionResult.Pass;
}
}
你在C#。您可以将此enum
作为属性保存在类
或struct
中,该类隐式转换为bool
,反之亦然:
public enum ActionResult
{
NoResult,
Fail,
Pass,
Exception
}
public struct TestActionResult
{
public TestActionResult(ActionResult initialResult)
{
Result = initialResult;
}
private static readonly TestActionResult PassResult = new TestActionResult { Result = ActionResult.Pass };
private static readonly TestActionResult FailResult = new TestActionResult { Result = ActionResult.Fail };
public ActionResult Result { get; private set; }
public static implicit operator TestActionResult(bool b)
{
return b ? PassResult : FailResult;
}
public static implicit operator bool(TestActionResult tar)
{
return tar.Result == ActionResult.Pass;
}
}
似乎枚举运算符重载在C中是不可能的。->要在何处添加这些运算符?您可以创建一个
struct TestActionResult
,它有一个属性ActionResult
(它是您的枚举)。然后你可以在那里添加bool
隐式运算符(或/和true
/false
运算符)。嗨,蒂姆,我现在可以在任何地方添加这些操作数,你能给我举个小例子吗?@johnanthonydanielnolan关于bool的扩展怎么样。bool.ToEnum()即??哦,这很有趣,我对扩展非常熟悉,可以考虑创建一个扩展来基于布尔值给我一个TestActionResult,如果我找不到适合这些问题的解决方案,我会回到这个问题上来谢谢!似乎枚举运算符重载在C中是不可能的。->要在何处添加这些运算符?您可以创建一个struct TestActionResult
,它有一个属性ActionResult
(它是您的枚举)。然后你可以在那里添加bool
隐式运算符(或/和true
/false
运算符)。嗨,蒂姆,我现在可以在任何地方添加这些操作数,你能给我举个小例子吗?@johnanthonydanielnolan关于bool的扩展怎么样。bool.ToEnum()即??哦,这很有趣,我对扩展非常熟悉,可以考虑创建一个扩展来基于布尔值给我一个TestActionResult,如果我找不到适合这些问题的解决方案,我会回到这个问题上来谢谢!谢谢Thierry我没有提到我想要一个不使用三元操作数的解决方案-我感谢你的帮助,尽管+1(Y)谢谢Thierry我没有提到我想要一个不使用三元操作数的解决方案-我感谢你的帮助,尽管+1(Y)谢谢。有用的信息谢谢。有用信息