
お世話になっております。
Visual Studio 2008にて開発していますが
以下のfoo1でエラーになる原因がわかりません。
foo2, foo3では問題ありませんのでDirectCastが使えないといった理由でもなさそうです。
MSDNを調べてみたのですがこれといったものは見つかりませんでした。
おそらく、何れかの仕様に違反しているのでしょうが具体的な原因について教えてもらえないでしょうか?
Public Shared Function foo1(Of T As Class)(ByVal c As Control) As T
Return DirectCast(c, T)
End Function
Public Shared Function foo2(Of T As Class)(ByVal c As Object) As T
Return DirectCast(c, T)
End Function
Public Shared Function foo3(Of T As Class)(ByVal c As Control) As T
Return TryCast(c, T)
End Function
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
お世話になります。
「変換が失敗した場合、CType および DirectCast の両方から InvalidCastException エラーが発生します。これは、アプリケーションのパフォーマンスに悪影響を与える可能性があります。TryCast は、例外を処理するのではなく、返された値が Nothing かどうかをテストするだけで済むように Nothing (Visual Basic) を返します。」
と
データ型 が 参照型のみ というところが違いかと思います。
参考URL:http://msdn.microsoft.com/ja-jp/library/zyy863x8 …
No.1
- 回答日時:
お世話になります。
MSDN をみると
「キーワード DirectCast は、CType 関数 およびキーワード TryCast と同じ方法で使用します。1 つ目の引数に式を指定し、2 つ目の引数に変換後の型を指定します。DirectCast の場合、この 2 つの引数のデータ型の間に、継承または実装の関係があることが必要です。つまり、一方の型が他方の型を継承または実装している必要があります。 」
とのことらしいです。
参考URL:http://msdn.microsoft.com/ja-jp/library/7k6y2h6x …
この回答への補足
回答ありがとうございます。
foo2が良くてfoo1がだめな理由は分かりました。foo1は
Public Shared Function foo1(Of T As Control)(ByVal c As Control) As T
Return DirectCast(c, T)
End Function
このように記述しなければならないのですね。
残りのfoo3がOKな理由はなぜでしょうか?
TryCastのMSDNにも参考に頂いたURLと同様の記述が見受けられるのでエラーになるのが正しいように思えますが…
「TryCast キーワードは、CType 関数 や DirectCast キーワードと同じように使用します。最初の引数は式、2 つ目の引数は変換する型です。TryCast は、クラスやインターフェイスなどの参照型のみを扱います。2 つの型の間には、継承または実装の関係が必要です。つまり、一方の型が他方を継承しているか、実装している必要があります。」
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excel VBA セルの値がおかしいです
-
VBA セル間のリンク修正につい...
-
【マクロ】並び替えの範囲が、...
-
vba textboxへの入力について教...
-
ワードの図形にマクロを登録で...
-
エクエルのVBAコードについて教...
-
複数のExcelファイルをマージす...
-
Vba Array関数について教えてく...
-
【マクロ】シートの変数へ入れ...
-
【マクロ】売上一覧YYYYMMDDHHS...
-
Excel VBA 選択範囲の罫線色の...
-
VBAでCOPYを繰り返すと、処理が...
-
【マクロ】開いているブックの...
-
えくせるのVBAコードについて教...
-
VBAの「To」という語句について
-
VB.net 文字列から日付型へ変更...
-
【ExcelVBA】5万行以上のデー...
-
VBA ユーザーフォーム ボタンク...
-
Vba セルの4辺について罫線が有...
-
vbsでのwebフォームへの入力制限?
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C# try-catch でcatchに飛ばす方法
-
CreateObject("Excel.Applicati...
-
winsock通信時エラーの回避
-
【C#】アップロード時に「アプ...
-
インクルードしたファイルの関...
-
FileCopy時のエラー
-
イベントID 2002について
-
fopenでエラーとなる
-
IIS7.5の設定の仕方
-
オーバーフローが発生します
-
このページの状態情報は無効で...
-
VBA RemoveDuplicatesで「アプ...
-
SQLサーバーへの接続に 接...
-
エラー内容について
-
オブジェクト生成エラー
-
ASP.NETで使用しているJavascri...
-
エラー 'ASP 0115' について
-
oracleを利用できません。(glob...
-
Excelの配列について
-
EXECLマクロでshapeがグルーフ...
おすすめ情報