DirectCast、CTYPE、TryCastでデータ型をキャストします
-
01-10-2019 - |
質問
2005年にVB6からVB.NETに移動して以来、CTYPEを使用して、あるデータ型から別のデータ型に鋳造しています。これを行うのは、タイプが速く、VB6に存在するために使用されているため、明らかに違いがないのにDirectCastを使用しなければならない理由がわからないからです。
時々キャストが失敗する可能性があることを理解しているので、時々TryCastを使用します。ただし、CTYPEとDirectCastの違いは得られません。
誰もがプレーンシンプルな英語の違いを教えてもらえますか?どこで使用するかの例を追加することも役立ちます。
解決
TryCastとDirectCastは、CLRのキャストのサポートに直接マッピングするキャスティングオペレーターです。ベースタイプのオブジェクトを派生型にすばやくキャストしたり、値タイプの値をボックスしたりすることができます。 DirectCastは、キャストが不可能な場合に例外をスローします。TryCastは失敗した場合、何も返しません。通常、プログラミングの間違いをキャッチするためにDirectCastを好みたいと思っています。
CTYPEは、CLRが眉をひそめる変換のスーパーセットを可能にします。私が考えることができる最良の例は、文字列を番号または日付に変換することです。例えば:
Dim obj As Object
obj = "4/1/2010"
Dim dt As DateTime = CType(obj, DateTime)
Option Strictが有効な場合は、使用する必要があります。オフがあれば、直接それを行うことができます:
Option Strict Off
...
Dim dt As DateTime = obj
もちろん非常に便利で、動的に型付けされた言語としてのVB.NETのレガシーの一部。しかし、問題がないわけではありませんが、その日付はstackoverflow.comでのユニコーンの日ですが、ブリトンが弦に入る1月の日になります。予期しない変換がCLRがこれらを直接許可しない理由です。明示的な、決して驚きの変換は次のようになりません:
Dim dt As DateTime = DateTime.Parse(obj.ToString(), _
System.Globalization.CultureInfo.GetCultureInfo("en-US").DateTimeFormat)
Try/DirectCast vs CTYPEと明示的な変換を購入する必要があるかどうかは、むしろ個人的な選択です。オプションを厳密にプログラムしている場合は、Try/DirectCastの使用を絶対に開始する必要があります。動的タイピングの利便性が好きなのでVB.NET言語を好むなら、CTYPEにとどまることをheしないでください。
他のヒント
DirectCastは、値タイプ(整数...など)で2倍高速ですが、参照タイプでは同じです。
詳細については、「変換関数、CTYPE、DirectCast、およびSystem.Convert」セクションを参照してください。 これ MSDNページ。
これ ページ よく説明します。
それを読んで、私はあなたが使用するときだと思います DirectCast
, 、変換は、狭窄や拡張(この場合は数値データ)なしで機能すると確信しています。一方、 CType
開発者が狭窄/拡張を認識しているため、それに変換しようとします。
「変換」とは、あるデータタイプを別のデータタイプに変換することを意味します(例:文字列から整数、10進数から整数、文字列など)。
「cast」とは、1つのタイプのオブジェクトを次のルールのいずれかによって関連する別のタイプに変更することを意味します。
http://www.thedevheaven.com/2012/09/directcast-vs-ctype.html