parameter = Convert.ChangeType(parameter, value.GetType());
:
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();
}
}
そして例の使用はようなものになるだろう。だから、プリミティブ型に文字列変換を行います。
csharp> Convert.ChangeType("1", typeof(int));
1
csharp> Convert.ChangeType("1", typeof(int)).GetType();
System.Int32
およびその逆:
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
}
あなたはタイプを変更する場合:
csharp> Convert.ChangeType(1, typeof(string));
"1"
csharp> Convert.ChangeType(1, typeof(string)).GetType();
System.String
'value'と' parameter'の両方が整数であれば、それは問題ありません。それが失敗した例を教えてください。 –
ConverterParametersは文字列として渡されます。したがって、0を入力すると、それが「0」として読み込まれ、falseが返されます。 – Rachel
そうですね、質問ではそれを明確にすることが役に立ちます。 –