Generische Methode zurückgeben Nullable-Typ Werte

Schrieb ich unter Methode mit folgenden Anforderungen

  1. Eingang xmlnode-und Attributname
  2. geben den Wert zurück, wenn es gefunden wird mit dem Attribut name übergeben
  3. Wo es keinen Wert in Attributname übergeben wird, sollte es wieder -

    3.1. Für int -1
    3.2. Für Datetime DateTime.MinValue
    3.3. Für den String " null
    3.4. Für bool, null

Unten-Methode fehlschlägt für den 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));
        }

Ändern, wenn dies

public 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 fällt für den string-Typ, d.h. Fall 3.3

Freuen uns auf etwas Hilfe.

  • Wie nennt man die Methode in deinem ersten code? Müssten Sie nennen, wie AttributeValue<bool?>(...) Wenn Sie einfach anrufen AttributeValue<bool>(...) dann null ist kein Gültiger Wert für bool. EDIT: Und der zweite Fall nicht, weil string können nicht verwendet werden System.Nullable<T> weil string ist kein value-Typ struct.
InformationsquelleAutor Ashish | 2013-06-28
Schreibe einen Kommentar