KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
I am trying to write a generic Parse method that converts and returns a strongly typed value from a NamedValueCollection. I tried two methods but both of these methods are going through boxing and unboxing to get the value. Does anyone know a way to avoid the boxing? If you saw this in production would you not like it, how bad is it for performance? Usuage: var id = Request.QueryString.Parse<int>("id"); Attempt #1: public static T Parse<T>(this NameValueCollection col, string key) { string value = col[key]; if (string.IsNullOrEmpty(value)) return default(T); if (typeof(T) == typeof(int)) { //return int.Parse(value); // cannot convert int to T //return (T)int.Parse(value); // cannot convert int to T return (T)(object)int.Parse(value); // works but boxes } if (typeof(T) == typeof(long)) { return (T)(object)long.Parse(value); // works but boxes } ... return default(T); } Attempt #2 (using reflection): public static T Parse<T>(this NameValueCollection col, string key) { string value = col[key]; if (string.IsNullOrEmpty(value)) return default(T); try { var parseMethod = typeof(T).GetMethod("Parse", new Type[] { typeof(string) }); if (parseMethod == null) return default(T); // still boxing because invoke returns an object var parsedVal = parseMethod.Invoke(null, new object[] { value }); return (T)parsedVal; } // No Proper Parse Method found catch(AmbiguousMatchException) { } return default(T); }
Tags (comma-separated)
Save Edits
Cancel