Come faccio a inserire un oggetto in un int in un convertitore?
Domanda
Mi arrendo, come faccio io scaccio questo?
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;
}
}
Soluzione
Sia Convert.ToInt32
o Int32.Parse
dovrebbero lavorare ... Se così non fosse, allora il valore non è sicuramente un int;)
Provate a mettere un punto di interruzione nel vostro convertitore per guardare il valore, potrebbe mostrare il motivo per cui non funziona
Altri suggerimenti
Se il valore è in realtà un oggetto stringa (con un contenuto che rappresenta un valore intero), questo dà il minimo sovraccarico:
int amount = Int32.Parse((string)value);
Il Convert.ToInt32
dovrebbe essere in grado di gestire più tutto ciò che è possibile convertire in int
, come una stringa contenente cifre o qualsiasi tipo numerico che rientra nell'intervallo che un int
può gestire.
Mettere un punto di interruzione la parentesi del metodo Convert apertura. Avviare l'applicazione in modalità di debug. Quando il punto di interruzione viene colpito analizzare il tipo effettivo di valore . Fare il cast. Se il valore è di stringa cast a corda e poi analizzare il risultato di ottenere un numero intero. Eseguire nuovamente il programma. Dovrebbe funzionare questa volta.
Se il valore è un oggetto, ToString()
è meglio convertire in stringa prima analisi a Int
int amount = Int32.Parse(value.ToString());
La risposta è fondamentalmente semplice. Poiché il IValueConverter
stesso ha un metodo chiamato Convert
non si può semplicemente ci dell'oggetto Convert
proprio così.
Ma se si aggiunge il prefisso corretto funziona:
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;
}
Questo è modo più sicuro, penso!