如何覆盖TryParse?

dlr*_*as2 7 c# types overriding

我想覆盖bool's TryParse方法接受"是"和"否".我知道我想要使用的方法(下面),但我不知道如何覆盖bool的方法.

... bool TryParse(string value, out bool result)
{
    if (value == "yes")
    {
        result = true;
        return true;
    }
    else if (value == "no")
    {
        result = false;
        return true;
    }
    else
    {
        return bool.TryParse(value, result);
    }
}
Run Code Online (Sandbox Code Playgroud)

Gre*_*reg 10

您不能覆盖静态方法.但是,您可以创建一个扩展方法.

public static bool TryParse(this string value, out bool result)
{
    // For a case-insensitive compare, I recommend using
    // "yes".Equals(value, StringComparison.OrdinalIgnoreCase); 
    if (value == "yes")
    {
        result = true;
        return true;
    }
    if (value == "no")
    {
        result = false;
        return true;
    }

    return bool.TryParse(value, out result);
}
Run Code Online (Sandbox Code Playgroud)

把它放在一个静态类中,并像这样调用你的代码:

string a = "yes";
bool isTrue;
bool canParse = a.TryParse(out isTrue);
Run Code Online (Sandbox Code Playgroud)

  • 我可能赞成这一点,但是当一个简单的静态方法足够时,我认为创建一个*extension*方法(特别是在一个常用的`System.String`类)上没有任何意义.令人非常不安的是,其他人似乎也有同样的想法; 在不适当的地方使用扩展方法似乎一直在痴迷. (3认同)
  • 就个人而言,我喜欢我的Parse方法返回`Nullable <>`,如果无法解析字符串,返回值为`null`.这消除了对out参数的需要,并且提供了良好的调用语法.例如`bool a ="blah".ParseBool()?? 假;` (2认同)
  • 扩展方法有什么不那么简单?你会把静态方法放在哪里?我对静态方法的问题是它导致了除了保存辅助方法之外没有其他目的的类,这些方法本来应该是扩展方法. (2认同)

Joh*_*ers 5

TryParse是一种静态方法.您不能覆盖静态方法.