Я хотел бы переопределить 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);
}
}
Вы не можете переопределить статический метод. Однако вы можете создать метод расширения.
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);
TryParse
- статический метод. Вы не можете переопределить статический метод.
Вы не можете переопределить 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");
}
}
}
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);
}