Como faço para converter um objeto para um int em um Converter?
Pergunta
Eu desisto, como faço para lançar isso?
class AmountIsTooHighConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
//int amount = (int)value;
//int amount = (int)(string)value;
//int amount = (int)(value.ToString);
//int amount = Int32.Parse(value);
//int amount = (int)Convert.ChangeType(value, typeof(int));
//int amount = Convert.ToInt32(value);
if (amount >= 35)
{
return true;
}
else
{
return false;
}
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return null;
}
}
Solução
Ambos Convert.ToInt32
ou Int32.Parse
deve funcionar ... Se não o fizerem, então o valor não é definitivamente um int;)
Tente colocar um ponto de interrupção no seu conversor de ver o valor, ele pode mostrar-lhe porque ele não funciona
Outras dicas
Se o valor é realmente um objeto string (com um conteúdo que representa um valor inteiro), o que dá a menor sobrecarga:
int amount = Int32.Parse((string)value);
O Convert.ToInt32
deve ser capaz de lidar com a maioria tudo o que é possível converter para um int
, como uma string contendo dígitos ou qualquer tipo numérico que está dentro da faixa que um int
pode manipular.
Coloque um ponto de interrupção no parêntese de seu método Converter abertura. Inicie a aplicação no modo de depuração. Quando o ponto de interrupção é atingido analisar o tipo real de valor . Faça o elenco. Se o valor for string de lançá-lo para string e, em seguida, analisar o resultado para obter um inteiro. Execute o programa novamente. Ele deve funcionar desta vez.
Se o valor for um objeto, ToString()
é melhor para converter a cadeia antes de analisar a Int
int amount = Int32.Parse(value.ToString());
A resposta é basicamente simples. Porque o IValueConverter
tem em si um método chamado Convert
você não pode simplesmente nos o objeto Convert
apenas como aquele.
Mas se você adicionar o prefixo correto funciona:
int amount = System.Convert.ToInt32(value);
int amount;
if(int32.TryParse((string)value,out amount)
{
if(amount>=35)
{
return true;
}
else
{
return false;
}
}
else
{
return false;
}
Esta é a maneira mais segura, eu acho!