And what you suggest actually works in well with my suggestion:
Dim X as Object = Nothing
TryParse("", X)
TryParse(Of Object)("", X)
<Obsolete("Specify (Of Object) if you really mean this", False)> _
function TryParse(byval Input As String,<Out> byref Value As Object) As Boolean
WL("Object direct")
return True
end function
function TryParse(Of T)(byval Input As String,<Out> byref Value As T) As Boolean
WL("Type: {0}", gettype(T).Name)
return True
end function
Compile Warning:
'Public Function TryParse(Input As String, ByRef Value As Object) As
Boolean' is obsolete: 'Specify (Of Object) if you really mean this'.
Output:
Object direct
Type: Object
I assume C# will perform the same.
--
Regards,
Mark Hurd, B.Sc.(Ma.)(Hons.)
On 12/04/2008, Sébastien Lorion <[EMAIL PROTECTED]> wrote:
> Hum, I don't know how generalized that scenario is, but it sure does
> not look clean to me and if I really want to do that, I would use the
> more explicit call
>
> TryParse<object>(input, out value)
>
> to make clear my intention. Anyway, I can live with that, I will just
> be more careful to watch for yet another trap (YAT).
>
> Sébastien
>
> On 4/11/08, Mark Hurd <[EMAIL PROTECTED]> wrote:
> > On 12/04/2008, Sébastien Lorion <[EMAIL PROTECTED]> wrote:
> > > Well, in my code I have another method similar to:
> > >
> > > void DoStuff(Type type, string input)
> > > {
> > > object value;
> > > if (TryParse(input, out value))
> > > {
> > > // ...
> > > }
> > > }
> > >
> > > I made a mistake and forgot to pass "type" to TryParse. I discovered
> > > the bug only at runtime when testing my code. I can understand the
> > > compiler behavior, but it is not what I expect since I think in most
> > > case, the programmer did not intend to do that. A warning would be
> > > nice here IMO.
> > >
> > > Sébastien
> >
> >
> > I assume the warning you're looking for is something like "Generic
> > type inferred as Object", which would be the deliberate case for too
> > many situations to be a warning. (Remember that in most cases warnings
> > are seen as "show stoppers" -- the only valid final build is one
> > without any warnings.)
> >
> > However, if you want it to be a warning or invalid for your code, add
> > an overload:
> >
> > [Obsolete("Is this what you really meant?", false)]
> > bool TryParse(string Input, out object Value)
> >
> > And when the overload resolution matches that signature, you'll get
> > the Obsolete warning (or error if you pass True in the
> > ObsoleteAttribute reference).
> >
> > Regards,
> > Mark Hurd, B.Sc.(Ma.)(Hons.)
> >
> > P.S. I've hand crafted the C# code above from this hand crafted VB.NET:
> >
> > <Obsolete("Is this what you really meant?", False)> _
> > Function TryParse(ByVal Input As String, <Out()> ByRef Value As
> > Object> As Boolean
> >
>
> --
> Sébastien
> www.sebastienlorion.com
>
===================================
This list is hosted by DevelopMentor® http://www.develop.com
View archives and manage your subscription(s) at http://discuss.develop.com