parameter = Convert.ChangeType(parameter, value.GetType());
Bu yalnızca çalışacaktır zaman gerçek IConvertible
parameter
değişken aletlerin tipi (ilkel türleri görür ve string):
public class IsObjectEqualParameterConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value == null && parameter == null)
return true;
if (value == null)
return false;
// Incorrectly returns False when the ConverterParameter is an integer
// Would like to try and cast parameter into whatever type value before checking equality
// Something like: return value.Equals((parameter as value.GetType()));
return value.Equals(parameter);
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
Ve örnek kullanım şey gibi olurdu.
csharp> Convert.ChangeType("1", typeof(int));
1
csharp> Convert.ChangeType("1", typeof(int)).GetType();
System.Int32
Ve tersi: Yani ilkel türlerine dize dönüşümleri yapacak
using System.Reflection;
int a = 10;
string str = "10";
Type a_type = a.GetType(), str_type = str.GetType();
try
{
if (Convert.ChangeType((object)a, str_type).Equals(str))
{
}
}
catch (Exception ex)
{
//Can't to cast one type to other
}
Eğer tipleri değiştirirseniz:
csharp> Convert.ChangeType(1, typeof(string));
"1"
csharp> Convert.ChangeType(1, typeof(string)).GetType();
System.String
Eğer hem "value" hem de "parameter" ifadesi tamsayı ise, iyi olmalıdır. Bunun bir örneği başarısız olur mu? –
DönüştürücüParametreler dizeler olarak geçiyor, bu yüzden 0 girdiğimde "0" okuyor ve yanlış döndürülüyor. – Rachel
Doğru - soruda bunu açıklığa kavuşturmak yararlı olacaktır. –