bool
TryParse
yöntemini "evet" ve "hayır" kabul etme yöntemini geçersiz kılmak istiyorum. Kullanmak istediğim yöntemi biliyorum (aşağıda) ama bool
'un yöntemini nasıl geçersiz edeceğimi bilmiyorum.TryParse'i nasıl geçersiz kılabilirim?
cevap
Statik bir yöntemi geçersiz kılabilirsiniz. Ancak bir uzantı yöntemi yaratabilirsiniz.
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);
}
statik sınıfta koy ve çağrı kodunuzu böyle:
string a = "yes";
bool isTrue;
bool canParse = a.TryParse(out isTrue);
Bu mümkün değil.
TryParse
statik bir yöntemdir ve statik yöntemleri geçersiz kılamaz.
Her zaman dizeleri istediğini yapmak için bir uzantısı yöntemi oluşturmak için deneyebilirsiniz: Sen TryParse
geçersiz kılamaz
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);
}
+1 Bu değeri kullanamazsınız. sadece sonuç –
döndürür Bu dize geçerli boolean - gerçek, yanlış, evet, hayır, 1, 0 olup olmadığını bilmek çalışıyorum."Hayır" geçerli bir booledir, ancak false döndürür. – dlras2
@ cyclotis04 - Gereksinimlerinizi daha iyi karşılamak için cevabımı güncelledim. Uzantı yöntemi şimdi daha fazla bool.TryParse() gibi davranır. Şahsen, ben büyük bir yelpaze dışında parametreler değilim. –
. Ancak, kolaylık sağlamak için string
'da bir uzantı yöntemi oluşturabilirsiniz.
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);
}
}
Ve sonra şöyle kullanılacaktır:
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");
}
}
}
Görünüşe göre bunu öneren tek kişi ben değilim. –
Şahsen, ayrıştırma yönteminin 'Null a1>' ı döndürmesini seviyorum, burada dize ayrıştırılamıyorsa dönüş değeri 'null' olur. Bu bir out parametresi ihtiyacını ortadan kaldırır ve güzel çağrı sözdizimini sağlar. , ör. bool a = "blah" .ParseBool()? false; ' – Greg
' Nullables' gerçekten ayrıştırma için kullanışlıdır, ancak mevcut 'TryParse' yöntemini geçersiz kılmaya çalışıyordum. Şimdi kendi başıma yazdığımda, muhtemelen böyle bir şey yapacağım. Ayrıca, 'StringComparison.OrdinalIgnoreCase' kullanıyorum ama sadece temiz görünmesini sağlamak için örneğime koymadım. Son olarak, çıkış türünüz bir "bool" olduğunda, neden 'TryParseBoolean' yönteminizi etiketlersiniz? ('Nullables' seçeneğine geçtiyseniz, bu isme ihtiyacınız varsayalım.) – dlras2
@ cyclotis04 - İyi çağrı. Çıkış parametresi nedeniyle, 'TryParse' ismi gerçekten yeterli olacaktır. – Greg