Bunu yapmak için dizeler için aşağıdaki uzantılara sahibim ("true").As<bool>(false)
Özellikle booleanlar için bazı özel dönüştürme yapmak için AsBool()
kullanacaktır. Bir şekilde T'den Boole'ye ve tersi için yayınlayamıyorum. Aşağıdaki kodu kullanarak çalıştım ama biraz overkill görünüyor.Cast T için bool ve tam tersi
Bu hat dair:
(T)Convert.ChangeType(AsBool(value, Convert.ToBoolean(fallbackValue)), typeof(T))
Doğrusu aşağıdaki kullanırsınız, ancak derlemek olmaz:
(T)AsBool(value, (bool)fallbackValue), typeof(T))
bir şey eksik veya bu gitmek için en kısa yoldur ?
public static T As<T>(this string value)
{
return As<T>(value, default(T));
}
public static T As<T>(this string value, T fallbackValue)
{
if (typeof(T) == typeof(bool))
{
return (T)Convert.ChangeType(AsBool(value,
Convert.ToBoolean(fallbackValue)),
typeof(T));
}
T result = default(T);
if (String.IsNullOrEmpty(value))
return fallbackValue;
try
{
var underlyingType = Nullable.GetUnderlyingType(typeof(T));
if (underlyingType == null)
result = (T)Convert.ChangeType(value, typeof(T));
else if (underlyingType == typeof(bool))
result = (T)Convert.ChangeType(AsBool(value,
Convert.ToBoolean(fallbackValue)),
typeof(T));
else
result = (T)Convert.ChangeType(value, underlyingType);
}
finally { }
return result;
}
public static bool AsBool(this string value)
{
return AsBool(value, false);
}
public static bool AsBool(this string value, bool fallbackValue)
{
if (String.IsNullOrEmpty(value))
return fallbackValue;
switch (value.ToLower())
{
case "1":
case "t":
case "true":
return true;
case "0":
case "f":
case "false":
return false;
default:
return fallbackValue;
}
}
çok temizleyici bu şekilde :) görünüyor. Doğrudan gönderemememin nedeni nedir? – Silvermind