C# 枚举的重载运算符

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

我对C#NET中的运算符重载有点迷惑不解

请检查以下示例

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)谢谢。有用的信息谢谢。有用信息