KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
Ladies and Gents, I recently tried this experiment: static class TryParseExtensions { public delegate bool TryParseMethod<T>(string s, out T maybeValue); public static T? OrNull<T>(this TryParseMethod<T> tryParser, string s) where T:struct { T result; return tryParser(s, out result) ? (T?)result : null; } } // compiler error "'int.TryParse(string, out int)' is a 'method', which is not valid in the given context" var result = int.TryParse.OrNull("1"); // int.TryParse.OrNull<int>("1"); doesnt work either // compiler error: type cannot be infered....why? var result2 = TryParseExtensions.OrNull(int.TryParse, "2"); // works as expected var result3 = TryParseExtensions.OrNull<int>(int.TryParse, "3"); var result4 = ((TryParseExtensions.TryParseMethod<int>)int.TryParse).OrNull("4"); I am wondering two things: Why can the compiler not infer the "int" type parameter? Do I understand correctly that extensions methods do not get discovered on Delegate types, as I guess they arent really of that type (but are a "Method") that only happen to match the delegates signature? As such a cast solves this. Would it be infeasable to enable scenario 1 to work (not this one specifically of course, but in general)? I guess from a language/compiler perspective and would it actually be useful, or am I just (attempting to) wildly abusing things here? Looking forward to some insights. Thnx
Tags (comma-separated)
Save Edits
Cancel