我想覆盖bool
的{{1}}方法以接受“是”和“否”。我知道我想要使用的方法(下面),但我不知道如何覆盖TryParse
的方法。
bool
答案 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)
这是不可能的。