Ich habe diese Funktion, die den aktuellen Wert überprüft. Wenn der aktuelle Wert (1. Parameter) null oder leer ist, dann verwendet es den Standardwert Sie (2 Paramter)Angegebene Cast nicht gültig mit generischen
public static T ZeroNull<T>(object currentValue, T defaultValue)
{
if (currentValue.Equals(DBNull.Value))
return (T)defaultValue;
else if (currentValue.Equals(string.Empty))
return (T)defaultValue;
else
return (T)currentValue;
}
Der obige Code übergeben ordnungsgemäß funktioniert, teilweise ... Aber wenn ich den Code wie dies, es wirft eine "angegebene Umwandlung ist ungültig ..."
float currValue = 20.1f;
int i = ZeroNull<int>(currValue, 0); // Specified cast is not valid
int i = ZeroNull<int>("10", 0); // Specified cast is not valid
Anybody den obigen Code Schnipsel verbessern? Und warum der Compiler diesen Fehler verursacht?
Grüße, Jessie
Das Problem ist, dass 'currValue' ist ein Box-Schwimmer (20.1f) und Ihr versucht, auf einen int unbox, die nicht gültig ist. Das gleiche gilt für "10" – chomba
Danke chomba, aber warum es keinen Fehler macht, wenn ich das tue. 'code'float currValue = 10.2f; 'code'int newCurrValue = (int) currValue; Ich nehme nur an, sie haben die gleiche Logik? – klaydze
Das liegt daran, dass Sie nur explizit zwischen Werttypen umwandeln. Wenn Sie jedoch ein Feld mit einem Werttyp erstellen, müssen Sie es zuerst für den zugrunde liegenden Typ entpacken. – chomba