Solved

DirectCast very very difficoult question

Posted on 2012-03-31
12
306 Views
Last Modified: 2012-04-18
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
Comment
Question by:luca345
  • 7
  • 5
12 Comments
 
LVL 44

Expert Comment

by:AndyAinscow
ID: 37790788
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
 

Author Comment

by:luca345
ID: 37790812
Hi AndyAinscow ,

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

Thank you !!
0
 
LVL 44

Expert Comment

by:AndyAinscow
ID: 37791022
I thought you wanted it in C# because you gave an example in VB but said C# uses different syntax
0
 
LVL 44

Expert Comment

by:AndyAinscow
ID: 37791390
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
 

Author Comment

by:luca345
ID: 37791791
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
 
LVL 44

Expert Comment

by:AndyAinscow
ID: 37794680
Works perfectly here - see picture
0002.jpg
0
How your wiki can always stay up-to-date

Quip doubles as a “living” wiki and a project management tool that evolves with your organization. As you finish projects in Quip, the work remains, easily accessible to all team members, new and old.
- Increase transparency
- Onboard new hires faster
- Access from mobile/offline

 

Author Comment

by:luca345
ID: 37796704
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
 
LVL 44

Expert Comment

by:AndyAinscow
ID: 37797249
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
 
LVL 44

Expert Comment

by:AndyAinscow
ID: 37797375
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
 

Author Comment

by:luca345
ID: 37797565
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
 
LVL 44

Accepted Solution

by:
AndyAinscow earned 500 total points
ID: 37797618
I don't think you can do it that simply.
0
 

Author Closing Comment

by:luca345
ID: 37860504
Very good !
0

Featured Post

How to run any project with ease

Manage projects of all sizes how you want. Great for personal to-do lists, project milestones, team priorities and launch plans.
- Combine task lists, docs, spreadsheets, and chat in one
- View and edit from mobile/offline
- Cut down on emails

Join & Write a Comment

This article will show, step by step, how to integrate R code into a R Sweave document
Entity Framework is a powerful tool to help you interact with the DataBase but still doesn't help much when we have a Stored Procedure that returns more than one resultset. The solution takes some of out-of-the-box thinking; read on!
This tutorial will introduce the viewer to VisualVM for the Java platform application. This video explains an example program and covers the Overview, Monitor, and Heap Dump tabs.
The goal of the tutorial is to teach the user how to use functions in C++. The video will cover how to define functions, how to call functions and how to create functions prototypes. Microsoft Visual C++ 2010 Express will be used as a text editor an…

762 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

19 Experts available now in Live!

Get 1:1 Help Now