如何覆盖TryParse?

时间:2010-06-11 14:38:19

标签: c# types override

我想覆盖bool的{​​{1}}方法以接受“是”和“否”。我知道我想要使用的方法(下面),但我不知道如何覆盖TryParse的方法。

bool

5 个答案:

答案 0 :(得分: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);
}

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

string a = "yes";
bool isTrue;
bool canParse = a.TryParse(out isTrue);

答案 1 :(得分:5)

TryParse是一种静态方法。你不能覆盖静态方法。

答案 2 :(得分:3)

TryParse是一个静态方法,你不能覆盖静态方法。

您总是可以尝试为字符串创建一个扩展方法来执行您想要的操作:

public static bool ParseYesNo(this string str, out bool val)
{
    if(str.ToLowerInvariant() == "yes")
    {
        val = true;
        return true;
    }
    else if (str.ToLowerInvariant() == "no")
    {
        val = false;
        return true;
    }

    return bool.TryParse(str, out val);
}

答案 3 :(得分:2)

您无法覆盖TryParse。但是,为方便起见,您可以在string上创建扩展方法。

public static class StringExtension
{
    public static bool TryParseToBoolean(this string value, bool acceptYesNo, out bool result)
    {
        if (acceptYesNo)
        {
            string upper = value.ToUpper();
            if (upper == "YES")
            {
                result = true;
                return true;
            }
            if (upper == "NO")
            {
                result = false;
                return true;
            }
        }
        return bool.TryParse(value, out result);
    }
}

然后就会这样使用:

public static class Program
{
    public static void Main(string[] args)
    {
        bool result;
        string value = "yes";
        if (value.TryParseToBoolean(true, out result))
        {
            Console.WriteLine("good input");
        }
        else
        {
            Console.WriteLine("bad input");
        }
    }
}

答案 4 :(得分:1)

这是不可能的。