首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何覆盖TryParse?

如何覆盖TryParse?
EN

Stack Overflow用户
提问于 2010-06-11 22:38:19
回答 5查看 4.4K关注 0票数 7

我想重写boolTryParse方法以接受"yes“和”no“。我知道我想使用的方法(如下所示),但我不知道如何重写bool的方法。

代码语言:javascript
复制
... 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);
    }
}
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2010-06-11 22:42:00

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

代码语言:javascript
复制
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);
}

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

代码语言:javascript
复制
string a = "yes";
bool isTrue;
bool canParse = a.TryParse(out isTrue);
票数 11
EN

Stack Overflow用户

发布于 2010-06-11 22:40:15

TryParse是一种静态方法。您不能重写静态方法。

票数 5
EN

Stack Overflow用户

发布于 2010-06-11 22:43:19

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

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

代码语言:javascript
复制
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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3023681

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档