Extension methods aren''t supported by C# with Example



Extension methods aren''t supported by C# with Example

dynamic code 
static class Program 
{ 
static void Main() 
{ 
dynamic dynamicObject = new ExpandoObject(); 
string awesomeString = "Awesome"; 
// Prints True 
Console.WriteLine(awesomeString.IsThisAwesome()); 
dynamicObject.StringValue = awesomeString; 
// Prints True 
Console.WriteLine(StringExtensions.IsThisAwesome(dynamicObject.StringValue)); 
// No compile time error or warning, but on runtime throws RuntimeBinderException 
Console.WriteLine(dynamicObject.StringValue.IsThisAwesome()); 
} 
 

} 
static class StringExtensions 
{ 
public static bool IsThisAwesome(this string value) 
{ 
return value.Equals("Awesome"); 
} 
} 
The reason [calling extension methods from dynamic code] doesn't work is because in regular, non- 
dynamic code extension methods work by doing a full search of all the classes known to the compiler for 
a static class that has an extension method that matches. The search goes in order based on the 
namespace nesting and available using directives in each namespace. 
That means that in order to get a dynamic extension method invocation resolved correctly, somehow the 
DLR has to know at runtime what all the namespace nestings and using directives were in your source 
code. We do not have a mechanism handy for encoding all that information into the call site. We 
considered inventing such a mechanism, but decided that it was too high cost and produced too much 
schedule risk to be worth it. 
Source 

0 Comment's

Comment Form