• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 330
  • Last Modified:

DirectCast very very difficoult question

Hi ,

I need a particular request.

In my project there are more then 150/200 calls to DirectCast.

I see that in C# there is an equivalent, but use a very different sintax.

In short:

I like to create a function that emulate DirectCast with another name:


My_DirectCast that inside use direct cast. To explain better the concept, something like this:

//
Public Function My_DirectCast(Expression , Type) as Object

 return DirectCast(Expression , Type)

End Function
//

and IT is not easy do this, because the compiler do not accept Type.

But after this I need a way to emulate the some situation in C#

//
Object My_DirectCast(Expression , Type)) {

Return (Type)Exression;

}
//

and probably this is more difficoult then the previous.

I am aware that it is not easy but I hope is possible do this.

If is possible do this I don't need to replace MANUALLY 150/200 or more code rows but only one.

Please HELP ME !!!!!
0
luca345
Asked:
luca345
  • 7
  • 5
1 Solution
 
AndyAinscowFreelance programmer / ConsultantCommented:
The following works - but really needs error trapping to in case the conversion fails.

       public T  foo<T>(Object obj)
        {
            return (T) Convert.ChangeType(obj, typeof(T));
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            int i = foo<int>(23.45);
            double d = foo<double>(3.14159);
        }
0
 
luca345Author Commented:
Hi AndyAinscow ,

Because I have a bit difficoult to understand C# can you try to do the some in VB.net ?

Thank you !!
0
 
AndyAinscowFreelance programmer / ConsultantCommented:
I thought you wanted it in C# because you gave an example in VB but said C# uses different syntax
0
The new generation of project management tools

With monday.com’s project management tool, you can see what everyone on your team is working in a single glance. Its intuitive dashboards are customizable, so you can create systems that work for you.

 
AndyAinscowFreelance programmer / ConsultantCommented:
VB isn't my speciality.
I've done a quick bit of searching and found this:

   Public Shared Function CAnyType(Of T)(ByRef UTO As Object) As T
        Return CType(UTO, T)
    End Function

I think you call it with something like
d = CAnyType(of double)(3.14159)
i = CAnyType(of integer)(2.345)

CType should be similar to your DirectCast, I think this might work or at least get you started
0
 
luca345Author Commented:
Hi Andy ,

Not work, I have try a similar code but VB don't accepts the 2° parameter because is a Type and VB want a object or class.
0
 
AndyAinscowFreelance programmer / ConsultantCommented:
Works perfectly here - see picture
0002.jpg
0
 
luca345Author Commented:
Hi Andy ,

Thank you for your code but the the problem is more hard.

Please see attach.

I need a function that accept the some arguments of the original directcast and return the some value.
directr-cast.png
0
 
AndyAinscowFreelance programmer / ConsultantCommented:
I don't know how the developers that wrote the compiler do the work of transferring a type in the way it is done in DirectCast.

The way it usually is done is what I showed earlier and here again using DirectCast in the function.
How one can pass a generic Type into a function
0
 
AndyAinscowFreelance programmer / ConsultantCommented:
There are always two (rather silly) other possibilities

1)
Function CastToDouble(1.23) as Double   and so on for int, string....

2)
Function Cast(obj, string) as object  which has a big switch statement to call the appropriate DirectCast based upon the string value
0
 
luca345Author Commented:
Hi ,

I explain better what I need:

I my project there are 100/150 calls  to DirectCast.

In my compiler I need to go to 'replace' and 'all'    'DirectCast' with 'MyDirectCast' .

In your code I can't do 'replace all' because the arguments are different:

1) Is different the order.
2) You have add 'of'.


In short I need a clone of DirectCast with identical arguments::

//

a = DirectCast(b , c)

a = CAnyType(b , c )

//

In this mode, what I replace  'DirectCast' with ' CAnyType' I don't need to change others.

I don't known if this is possible or not.
0
 
AndyAinscowFreelance programmer / ConsultantCommented:
I don't think you can do it that simply.
0
 
luca345Author Commented:
Very good !
0

Featured Post

Take Control of Web Hosting For Your Clients

As a web developer or IT admin, successfully managing multiple client accounts can be challenging. In this webinar we will look at the tools provided by Media Temple and Plesk to make managing your clients’ hosting easier.

  • 7
  • 5
Tackle projects and never again get stuck behind a technical roadblock.
Join Now