Как я могу переопределить TryParse?

Я хотел бы переопределить bool 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);
    }
}
7
задан dlras2 11 June 2010 в 14:38
поделиться

5 ответов

Вы не можете переопределить статический метод. Однако вы можете создать метод расширения.

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);
10
ответ дан 6 December 2019 в 08:41
поделиться

TryParse - статический метод. Вы не можете переопределить статический метод.

5
ответ дан 6 December 2019 в 08:41
поделиться

Вы не можете переопределить 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");
        }
    }
}
2
ответ дан 6 December 2019 в 08:41
поделиться

Это невозможно.

1
ответ дан 6 December 2019 в 08:41
поделиться

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
ответ дан 6 December 2019 в 08:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: