KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
Is there any way to use the new dynamic features in the 4.0 framework like ExpandoObject in VB.NET without setting Option Strict Off ? With C#, you lose type safety only with the variables you specifically declare as dynamic . But with VB, the only way I've found to use these features is with the old Option Strict Off trick that's been in VB.NET since the beginning. Without Option Strict, everything in the file is polluted with fuzzy typing like so: Option Explicit On Option Strict Off Option Infer On Partial Public Class ClassX Public Sub TestDynamic() Dim dyn As Object = New System.Dynamic.ExpandoObject() Dim a As String = 1 ''# Ew! Dim obj As Object = "999" dyn.Str = a ''# a is a string, remember? Even though it has a number ''# dyn.Str = 1 : Type = System.String Console.WriteLine("dyn.Str = {0} : Type = {1}", dyn.Str, dyn.Str.GetType().ToString()) dyn.Num = 123 ''# dyn.Num = 123 : Type = System.Int32 Console.WriteLine("dyn.Num = {0} : Type = {1}", dyn.Num, dyn.Num.GetType().ToString()) dyn.Dbl = obj / 9 ''# dyn.Dbl = 111 : Type = System.Double Console.WriteLine("dyn.Dbl = {0} : Type = {1}", dyn.Dbl, dyn.Dbl.GetType().ToString()) dyn.Obj = obj ''# dyn.Obj = 999 : Type = System.String Console.WriteLine("dyn.Obj = {0} : Type = {1}", dyn.Obj, dyn.Obj.GetType().ToString()) dyn.Dte = #5/5/1955# ''# dyn.Dte = 7/7/1977 12:00:00 AM : Type = System.DateTime Console.WriteLine("dyn.Dte = {0} : Type = {1}", dyn.Dte, dyn.Dte.GetType().ToString()) AmICalled(dyn.Num) AmICalled(dyn.Obj) AmICalled(dyn.Str) AmICalled(dyn.Dbl) Try AmICalled(dyn.Dte) Catch Console.WriteLine("Dates don't convert to ints I guess... but we don't know that 'till runtime") End Try Console.WriteLine(dyn.Num + dyn.Str) ' 124!?
Tags (comma-separated)
Save Edits
Cancel