2010-01-21 6 views
1

J'ai la méthode d'extension suivanteCastings/Conversion de type Performance

public static T Field<T>(this DataRow row, string columnName) 
{ 
    return (T)Convert.ChangeType(row[columnName], typeof(T)); 
} 

Il fonctionne, mais je suis en train de l'accélérer. Y a-t-il un moyen d'accélérer cela? Avec une déclaration de cas, puis tapez des conversions spécifiques? J'ai essayé quelques trucs comme utiliser int.Parse, mais même si je sais que je veux un int retourné, je dois utiliser ChangeType pour le compiler.

return (T)Convert.ChangeType(intVal, typeof(T)); 

Répondre

4

Avez-vous réellement besoin d'effectuer une conversion, ou êtes-vous en train de diffuser?

Si vous avez juste besoin d'une distribution, alors un simple return (T)row[columnName]; devrait faire l'affaire.

(Au fait, l'utilisation de Convert.ChangeType cause vraiment des problèmes de performances, ce qui me semble être une micro-optimisation inutile, mais je préférerais probablement la plaine pour des raisons de lisibilité, en supposant qu'elle réponde à vos besoins.

+0

@Luke, la conversion en clair ne fonctionne pas toujours, alors que Convert.ChangeType semble toujours renvoyer la valeur correcte quel que soit le type que je lui lance. – CaffGeek

+0

@Chad: Pouvez-vous donner des exemples de cas où la conversion ne fonctionne pas mais que 'ChangeType' le fait? Par exemple, quel est le type/valeur sous-jacent de la colonne et à quel type essayez-vous de le convertir? – LukeH

+0

les types sous-jacents varient, mais ils doivent toujours être convertibles en l'un des suivants: chaîne, int, bool, DateTime, octet, float, décimal. – CaffGeek