dynamic C# with Example



dynamic C# with Example

The dynamic keyword is used with dynamically typed objects. Objects declared as dynamic forego compile-time 
static checks, and are instead evaluated at runtime. 
using System; 
using System.Dynamic; 
dynamic info = new ExpandoObject(); 
info.Id = 123; 
info.Another = 456; 
Console.WriteLine(info.Another); 
// 456 
Console.WriteLine(info.DoesntExist); 
// Throws RuntimeBinderException 
The following example uses dynamic with Newtonsoft's library Json.NET, in order to easily read data from a 
deserialized JSON file. 
try 
{ 
string json = @"{ x : 10, y : ""ho""}"; 
dynamic deserializedJson = JsonConvert.DeserializeObject(json); 
int x = deserializedJson.x; 
string y = deserializedJson.y; 
// int z = deserializedJson.z; // throws RuntimeBinderException 
} 
catch (RuntimeBinderException e) 
{ 
// This exception is thrown when a property 
// that wasn't assigned to a dynamic variable is used 
} 
 

There are some limitations associated with the dynamic keyword. One of them is the use of extension methods. 
The following example adds an extension method for string: SayHello. 
static class StringExtensions 
{ 
public static string SayHello(this string s) => $"Hello {s}!"; 
} 
The first approach will be to call it as usual (as for a string): 
var person = "Person"; 
Console.WriteLine(person.SayHello()); 
dynamic manager = "Manager"; 
Console.WriteLine(manager.SayHello()); // RuntimeBinderException 
No compilation error, but at runtime you get a RuntimeBinderException. The workaround for this will be to call the 
extension method via the static class: 
var helloManager = StringExtensions.SayHello(manager); 
Console.WriteLine(helloManager); 

0 Comment's

Comment Form

Submit Comment