Why Use TryCast Instead Of Directcast
Aug 28, 2010Possible Duplicate: Why use TryCast instead of Directcast ? I want to know about the trycast and direct cast in vb.net. What is the difference between them?
View 2 RepliesPossible Duplicate: Why use TryCast instead of Directcast ? I want to know about the trycast and direct cast in vb.net. What is the difference between them?
View 2 RepliesWhat is the difference between DirectCast and TryCast? Can someone illustrate it in very simple words along with an example?
View 5 RepliesI find this behavior of TryCast in .NET 4.0 / VS 2010 rather confusing. In my understanding TryCast works like DirectCast, but will return Nothing instead of throwing an exception if a cast is not possible. VS 2010 / .NET 4
[Code]...
Ever since I moved from VB6 to VB.NET somewhere in 2005, I've been using CType to do casting from one data type to another. I do this because it is simply faster to type, used to exist in VB6 and I do not know why I have to be using DirectCast if there is apparently no difference between them.I use TryCast once in a while because I understand that sometimes casting can fail. I however cannot get the difference between CType and DirectCast.
View 3 RepliesI want to see if try cast can convert user entered answer to the type I have specified. Here's what I have: Dim t as type = GetType(myType) Dim ans = console.readline() If TryCast(ans, t) <> Nothing Then ... 'Doesn't work` In the example above the intelisense doesn't even show t. How to make it work?
View 4 RepliesHere is a test program I wrote to explore a facet of object casting ...
Module Module1
Sub Main()
Dim class1 As MyBaseClass = New MyBaseClass()
Dim class2 As MyInheritedClass = New MyInheritedClass()
Dim class3 As MyBaseClass = Nothing
[Code] .....
The problem comes with the TryCast statement on class3. My intention is that class3 remains as a baseclass, but when the TryCast is applied, class3 morphs itself into an Inherited class which is not what I wanted. So is there a gap in my OOP/VB.NET knowledge and this action is legitimate or should class3 still be regarded as a base class?
Does C# have an equivalent to VB.Net's DirectCast?I am aware that it has () casts and the 'as' keyword, but those line up to CType and TryCast.To be clear, these keywords do the following;CType/() casts: If it is already the correct type, cast it, otherwise look for a type converter and invoke it. If no type converter is found, throw an InvalidCastException.
TryCast/"as" keyword: If it is the correct type, cast it, otherwise return null.DirectCast: If it is the correct type, cast it, otherwise throw an InvalidCastException.
EDIT: After I have spelled out the above, some people have still responded that () is equivalent, so I will expand further upon why this is not true.
DirectCast only allows for either Narrowing or Widening conversions on inheritance tree, it does not support conversions across different branches like () does.ie: C#, this compiles and runs:
//This code uses a type converter to go across an inheritance tree
double d = 10;
int i = (int)d;
[code]....
i am using code to the value textbox2.text in the report and using the code like below [code]the textbox2 take various values in run time but when i run the code it display only the final value intermediated values are not displayed the whole situation is as follows.[code]
View 1 RepliesI have a very simple problem where I have a MyList As List(Of MyBaseClass) but and a couple of MySub(ByVal Dummy As MyDerivedClassA)/MySub(ByVal Dummy As MyDerivedClassB). So I want to do the following ...
For Each MyInstance As MyBaseClass In MyList
MySub(DirectCast(MyInstance, MyInstance.GetType())
...
[code].....
I learned how to use DirectCast over the last few days and it's really helped me. However, I have a similar issue, instead of textboxes I am looking at variables that are referenced in the class.To bring you all up to speed, I have four variables, a Boolean that dictates each of the 4 players I have playing my game. [code] I would assume it'd work similar to DirectCast but I am unsure. What I came up with caused errors: [code]
View 14 RepliesI have 15 textboxes named MissionT1-15Is there a simple way to set all of their text to "Mission"?
missionT1.text="Mission"but for all of them with a loop?I saw something with directcast but wasn't able to make it work.
I am an experienced C/C++/C# programmer who has just gotten into VB.NET. I generally use CType (and CInt, CBool, CStr) for casts because it is less characters and was the first way of casting which I was exposed to, but I am aware of DirectCast and TryCast as well. Simply, are there any differences (effect of cast, performance, etc.) between DirectCast and CType? I understand the idea of TryCast.
View 2 RepliesI have an SQL query that gets a max value so that I can decide the next value to use in an ID field. The code works fine when there's a matching result, but if the query returns Null, it throws a Specified Cast is Invalid error.This is the code I'm using:
LastID = DirectCast(SQLQuery.ExecuteScalar(), Integer)
What would be the proper way to check for a null value?
I suspect this is going to be one of those cases where within 2 minutes of posting myquestion, I finally hit upon the right combination of terms in Google to find what I'm looking for...
I usually avoid VB's built-in conversion functions (CStr, CDate, CBool, CInt, etc.) unless I need to do an actual conversion. If I'm just casting, say from an object to a string, I normally use either DirectCast or TryCast, under the assumption that CStr, etc., are doing some extra stuff I don't need. But sometimes the DirectCast syntax is a little cumbersome, as in the following example.[code]SqlDataReader.Item returns an Object, which needs to be cast to a String. CStr is easier to read, type, and explain (IMO). My question is, does it matter which one I use? Should I just go with CStr (and CDate and CBool, etc.) and not worry about the extra work I assume those functions are doing? Is there any other downside to using these functions?
View 3 RepliesI was wondering if there was anyway for me to get the string value of a point variable so that I can compare it. I tried to do something like:
DirectCast("point" & number, Point).ToString
I turned option strict on, wich gave me some errors. The errors are quite easy to fix, but it seems like there are several ways of doing things. [code] 'previoustime' is declared as a TimeSpan, and the column "sluttid" is defined as a TimeSpan-column.Now, as far as I know, there are two ways of solving this; using CType and using DirectCast, like this: [code]
View 4 RepliesPublic Enum Fruit
Red_Apple = 1
Oranges
Ripe_Banana
End Enum
Private Sub InitCombosRegular()
[Code]...
Why does the Ctype work and the Directcast does not with the same syntax? Yet if I cast the selectedValue to an int before I DirectCast, then it works
Does DirectCast, ctype, etc., are common function? Why it return type, and how do I used it? Is there others function where I need learn to be dot net expert?
View 3 Repliesin terms of performance (speed), does directcast beat ctype?
View 6 RepliesI'm helping a colleague develop a "catch all" type error handler for some controls his application. What he wants to do is pass the object that has the error, and the type of that object, such a TextBox or ComboBox, and then call the DirectCast method within his handler to properly address the Text attribute within it. In general, the method is looking like this:
Protected Sub SpecialErrorHandler(ByVal TargetControl As Object, ByVal ControlType As String)
MessageBox.Show("Bad Juice: " & DirectCast(TargetControl, ControlType(ObjType)).Text)
End Sub
So far any attempts to do a type conversion within the DirectCast method (since it is expecting an object in the general signature) or to even pass in the a Type object properly set is not working.
Any ideas here, or is this one of those "Casting doesn't work that way." type scenarios?
how can i cast a control to a type variable? heres the code i'm trying to use:
vb
Public Class form2Ex
Inherits Form2
Private list As Control = MyBase.CheckedListBox1
Private listType As Type
[Code]...
How come this is not a valid DirectCast:
Public Sub FB(OF T0 As IGH_Goo, T1 As IGH_Goo) _
(ByVal A As DataTree(Of T0), _
ByVal B As DataTree(Of T1))
Dim val_A As T1 = DirectCast(A.FirstItem, T1)
End Sub
[Code]...
I have a LINQ query to retrieve the maximum value of an integer column. The column is defined as NOT NULL in the database. However, when using the MAX aggregate function in SQL you will get a NULL result if no rows are returned by the query.Here is a sample LINQ query I am using against the Northwind database to demonstrate what I am doing.
var maxValue = (from p in nw.Products
where p.ProductID < 0
select p.ProductID as int?).Max();
C# correctly parses this query and maxValue has a type of int?. Furthermore, the SQL that is generated is perfect:
SELECT MAX([t0].[ProductID]) AS [value]
FROM [Products] AS [t0]
WHERE [t0].[ProductID] < @p0
The question is, how do I code this using VB.NET and get identical results? If I do a straight translation:
dim maxValue = (from p in Products
where p.ProductID < 0
select TryCast(p.ProductID, integer?)).Max()
I get a compile error. TryCast will only work with reference types, not value types. TryCast & "as" are slightly different in this respect. C# does a little extra work with boxing to handle value types. So, my next solution is to use CType instead of TryCast:
dim maxValue = (from p in Products
where p.ProductID > 0
select CType(p.ProductID, integer?)).Max()
This works, but it generates the following SQL:
SELECT MAX([t1].[value]) AS [value]
FROM (
SELECT [t0].[ProductID] AS [value], [t0].[ProductID]
[code]....
While this is correct, it is not very clean. Granted, in this particular case SQL Server would probably optimize the query it to be the same as the C# version, I can envisage situations where this might not be the case. Interestingly, in the C# version, if I use a normal cast (i.e. (int?)p.ProductID) instead of using the "as" operator I get the same SQL as the VB version. if there is a way to generate the optimal SQL in VB for this type of query?
why i get the error "DirectCast(err, SetupApiError) = InWow64 {-536870347}" when running the code below? i get this error when it calls the SetupDiCallClassInstaller method on the line: Case SetupApiError.NoAssociatedClass To SetupApiError.OnlyValidateViaAuthenticode Throw New Win32Exception("SetupAPI error: " & DirectCast(err, SetupApiError).ToString)
Dim result As Boolean = SetupDiSetClassInstallParams(handle, diData, params, Marshal.SizeOf(params))
If result = False Then Throw New Win32Exception
result = SetupDiCallClassInstaller(DiFunction.PropertyChange, handle, diData)
[code]....
Does anyone know what "IsNot Nothing" and "TryCast" means in code?
View 2 Replies