2016-12-01 5 views
0

ich diese grundlegende Methode entwickelt haben, die ich wäre in der Lage zu hoffen, jede Art zu trimmen und zurück:Trim und zurück jede Art

public static object TrimValue<T>(T arg, int MaxLength) 
{ 
    var val = arg.ToString(); 

    var trimVal = val.Substring(0, MaxLength); 

    return Convert.ChangeType(trimVal, arg.GetType()); 
} 

Verwendung:

double aDouble = 1000; 

    double cDouble = TrimValue(aDouble, 2); 

Leider bekomme ich die Fehlermeldung:

cannot implicitly convert type 'object' to 'double'

Ein Cast würde funktionieren, aber ich könnte ein Double, String oder Int schneiden, so dass es nicht funktioniert. Hat jemand eine Idee, wie man einen allgemeinen Wert trimmt?

Dank

+2

Was bedeutet „eine doppelte bis 2 Trimmen“ sogar gemein? Bedeutet es, dass sich "1000" zu "10" ändert? Was würde 'TrimValue (new DateTime (2016,12,1), 3)' zurückgeben? Wie kann Trimmen auf alles außer Saiten angewendet werden? –

+0

Daher wird es in TrimValue() in eine Zeichenkette umgewandelt! Damit wird sichergestellt, dass Daten nicht zu einer externen Quelle mit zu langen Werten gesendet werden, egal, um welche Daten es sich handelt! –

+2

@DanHall Warum ist dann nicht der Rückgabetyp 'string' oder warum haben Sie nicht den Rückgabetyp auf' T' gesetzt? – juharr

Antwort

1

Ihre Rückgabetyp ist nicht korrekt, statt object Wechselgeldrückgabe es die spezifische generische Typ, der vom Aufrufer übergeben zurückzukehren T mit:

public static T TrimValue<T>(T arg, int MaxLength) 
{ 
    var val = arg.ToString(); 

    var trimVal = val.Substring(0, MaxLength); 

    return (T)Convert.ChangeType(trimVal, arg.GetType()); 
}