如何覆盖 TryParse?

发布于 2024-09-05 06:30:45 字数 424 浏览 3 评论 0原文

我想重写 boolTryParse 方法来接受“是”和“否”。我知道我想使用的方法(如下),但我不知道如何覆盖 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);
    }
}

I would like to override bool's TryParse method to accept "yes" and "no." I know the method I want to use (below) but I don't know how to override bool's method.

... 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);
    }
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

樱娆 2024-09-12 06:30:45

您无法重写静态方法。但是,您可以创建一个扩展方法。

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);

You can't override a static method. You could however create an extension method.

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);
}

Put this in a static class, and call your code like this:

string a = "yes";
bool isTrue;
bool canParse = a.TryParse(out isTrue);
醉生梦死 2024-09-12 06:30:45

TryParse 是一个静态方法。您无法重写静态方法。

TryParse is a static method. You can't override a static method.

万人眼中万个我 2024-09-12 06:30:45

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);
}

TryParse is a static method and you can't override static methods.

You could always try to create an extension method for strings to do what you want:

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);
}
心意如水 2024-09-12 06:30:45

您无法覆盖 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");
        }
    }
}

You cannot override TryParse. However, you could create an extension method on string for convenience.

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);
    }
}

And then it would be used like so:

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");
        }
    }
}
青衫儰鉨ミ守葔 2024-09-12 06:30:45

这是不可能的。

This is not possible.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文