Wie kann ich warf ein Objekt in ein int in einem Konverter?
Frage
Ich gebe auf, wie kann ich warf das?
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;
}
}
Lösung
Sowohl Convert.ToInt32
oder Int32.Parse
sollte funktionieren ... Wenn sie dies nicht tun, dann wird der Wert ist definitiv kein int;)
Versuchen Sie einen Haltepunkt in Ihrem Konverter setzt den Wert zu sehen, könnte es Ihnen zeigen, warum es nicht funktioniert
Andere Tipps
Wenn der Wert tatsächlich ein String-Objekt ist (mit einem Inhalt, der einen ganzzahligen Wert darstellt), ergibt dies den geringsten Aufwand:
int amount = Int32.Parse((string)value);
Die Convert.ToInt32
sollte in der Lage sein, fast alles zu behandeln, die möglich ist, zu einem int
zu konvertieren, wie eine Zeichenfolge Ziffern oder einen beliebigen numerischen Typ enthält, die innerhalb des Bereichs, der ein int
verarbeiten kann.
Setzen Sie einen Haltepunkt an der öffnenden Klammer Ihrer Convert-Methode. Starten Sie Ihre Anwendung im Debug-Modus. Wenn der Haltepunkt erreicht die tatsächliche Art von Wert analysiert . Haben die Besetzung. Wenn der Wert ist, wirft Zeichenkette, die es zu bespannen und dann das Ergebnis analysieren, um eine ganze Zahl zu bekommen. Führen Sie das Programm erneut. Es sollte diesmal arbeiten.
Wenn der Wert ein Objekt ist, ToString()
besser zu Zeichenfolge konvertieren, bevor Int
int amount = Int32.Parse(value.ToString());
Parsen
Die Antwort ist im Grunde einfach. Da die IValueConverter
hat sich eine Methode namens Convert
kann man nicht einfach uns die Convert
Objekt einfach so.
Aber wenn Sie die richtige Vorsilbe hinzufügen es funktioniert:
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;
}
Das sicherste Weg ist, denke ich!