
お世話になっております。
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で質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたいの続き 5 2023/01/24 00:16
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたい 6 2023/01/23 12:00
- Visual Basic(VBA) VBAでfunctionを利用しようとしたときに「引数は省略できません」というエラーが出ます 1 2022/10/15 16:30
- Access(アクセス) Vba Userformを前面に出すについて 3 2022/04/15 12:29
- Visual Basic(VBA) Excel VBAで並べ替えをしたい 3 2023/02/25 09:31
- Visual Basic(VBA) EXCEL VBAにて動的にCheckBOXを複数作成し、同BOXにイベントを追加したい 1 2023/03/16 07:05
- Visual Basic(VBA) パーソナルXLSBのfuctionを呼び出すと「Functionが定義されていません」のエラーになる 2 2022/08/22 22:51
- Visual Basic(VBA) エクセルのマクロについて教えてください。 7 2023/07/04 09:18
- Visual Basic(VBA) VBA リボンののリカバリーでオーバーフローエラーになります 2 2023/07/04 19:07
- Visual Basic(VBA) エクセルのマクロについて教えてください。 4 2023/07/03 09:11
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C# try-catch でcatchに飛ばす方法
-
FireFoxで開けないサイト
-
VBSからPDFファイルを開きたい...
-
ASPでトランザクションをかける...
-
ADSIについて
-
oracleを利用できません。(glob...
-
[VB6.0] Inet OpenURLのエラー検出
-
ネットワーク上のPCのIPとホス...
-
Panelを重ねる方法
-
GridView表示の高速化
-
ソケット通信で同時受信の制限?
-
Response.Redirectで引数2つの...
-
ActiveDirectoryで高い層のOUを...
-
データ受け渡し時のSessionの使...
-
隠しフィールドをVBScriptでの...
-
ページ間のデータの受け渡し方...
-
ASP.netで使用するWEBサーバに...
-
vbscriptの変数宣言
-
データ受け渡し時の維持
-
目的に適しているプログラミン...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C# try-catch でcatchに飛ばす方法
-
FileCopy時のエラー
-
EXECLマクロでshapeがグルーフ...
-
fopenでエラーとなる
-
CreateObject("Excel.Applicati...
-
ASP 0x80004005 クライアント...
-
ADSIについて
-
winsock通信時エラーの回避
-
Outlookで添付ファイルの有無を...
-
CreateProcessでアプリケーショ...
-
SQLサーバーへの接続に 接...
-
ASP.NETで使用しているJavascri...
-
オーバーフローが発生します
-
oracleを利用できません。(glob...
-
ASP.net の OnClientClick
-
オブジェクト生成エラー
-
このページの状態情報は無効で...
-
イベントID 2002について
-
オラクル接続をopenしようとす...
-
Sendmail、エラーメールの制御(...
おすすめ情報