I can't quite remember where I first read the term "duck typing," but I think it had to do with web services. You know, if a given data passed to a service has the characteristics of an integer, it will get treated as an integer; likewise with dates, strings, and other simple types. In my return to VB.NET, I have found that the duck typing that can occur when data is moved through a System.Object can be very useful in VB. For example, I have been trying to work through a validation method that will compare a "live" value coming from the consumer of the method, comparing it with a value drawn from the configuration, and returning a Boolean indicating that the comparison was successful. To wit: Option Strict Off Function Validate(Of T As IComparable)(ByVal liveValue As T) As Boolean Dim myConfigVariable As T Dim comparisonValue As Integer = 0 'in the real world, this comes from config Dim comparison As Integer Dim myConfig As Object = "01234" 'in the real world, this comes from config Try myConfigVariable = myConfig comparison = myConfigVariable.CompareTo(liveValue) Catch ex As InvalidCastException Throw New ArgumentException("The live value was not of the same data type " & "as the data specified in the configuration.") Catch ex As ArgumentException Throw New ArgumentException("The live value was not of the same data type " & "as the data specified in the configuration.") End Try Console.WriteLine("Comparison: {0}", comparison) If comparison = 0 Then Console.WriteLine("The config value is equal to the live value.") ElseIf comparison < 0 Then Console.WriteLine("The config value is less than the live value.") ElseIf comparison > 0 Then Console.WriteLine("The config value is greater than the live value.") End If Return (comparisonValue = comparison) End Function The key to getting this to work was the "duck typing" done in the implicit cast from the Object variable myConfig to the T typed myConfigVariable. The value coming back from the config is always a String; so by putting it in the Object variable, we make it malleable as to type. Thus, when we take the Object[String] value and copy it to the T variable, it becomes the same type as the liveValue parameter. The only reason this would fail is if the config value can't be "duck typed" to the T type; e.g., the config value is "Config" and the T type is, say, Integer. Then we get an exception indicating that there is a mismatch between the config and the live data. I should also highlight that Option Strict needs to be off in order to massage the Object value into the T variable. Without this, you will get a compiler error.