I unten Methode mit follwing Anforderung schrieb -Generisches Verfahren Nullable Type Rückgabewerte
- Eingang ist xmlnode und attribute
- Rückkehr der Wert, wenn es mit dem zugehörigen Attributnamen weitergegeben gefunden
Wenn in attributeName kein Wert übergeben wird, sollte er zurückgeben -
3.1. Für int -1 3.2. Für Datetime DateTime.MinValue 3.3. Für String, null 3.4. Für bool, null
Unten Methode schlägt für Fall 3.4.
public T AttributeValue<T>(XmlNode node, string attributeName)
{
var value = new object();
if (node.Attributes[attributeName] != null && !string.IsNullOrEmpty(node.Attributes[attributeName].Value))
{
value = node.Attributes[attributeName].Value;
}
else
{
if (typeof(T) == typeof(int))
value = -1;
else if (typeof(T) == typeof(DateTime))
value = DateTime.MinValue;
else if (typeof(T) == typeof(string))
value = null;
else if (typeof(T) == typeof(bool))
value = null;
}
return (T)Convert.ChangeType(value, typeof(T));
}
Wenn Änderung
diespublic System.Nullable<T> AttributeValue<T>(XmlNode node, string attributeName) where T : struct
{
var value = new object();
if (node.Attributes[attributeName] != null && !string.IsNullOrEmpty(node.Attributes[attributeName].Value))
{
value = node.Attributes[attributeName].Value;
}
else
{
if (typeof(T) == typeof(int))
value = -1;
else if (typeof(T) == typeof(DateTime))
value = DateTime.MinValue;
else if (typeof(T) == typeof(string))
return null;
else if (typeof(T) == typeof(bool))
return null;
}
return (T?)Convert.ChangeType(value, typeof(T));
}
Es schlägt fehl, für einige Hilfe-String-Typ d Fall 3,3
Wir freuen uns.
Wie _call_ Sie die Methode in Ihrem ersten Satz von Code? Sie müssten es als 'AttributeValue (...)' aufrufen. Wenn Sie nur 'AttributValue (...)' aufrufen, dann ist 'null' kein gültiger Wert für' bool'. EDIT: Und Ihr zweiter Fall schlägt fehl, weil 'string' nicht für' System.Nullable 'verwendet werden kann, da' string' keine Struktur vom Werttyp ist. –