none
「Option Strict Off」を特定の範囲だけに適用するには? RRS feed

  • 質問

  • 一つのファイルの中で、通常は「Option Strict On」でコードを記述し、
    どうしてもそれだとうまくいかない箇所だけ限定的に「Option Strict Off」にしたいのですが、
    そういうことってできるのでしょうか?
    2018年12月7日 3:55

すべての返信

  • Option Strict Statementによると

    使用する場合、Option Strictステートメントは、ファイル内の他のコード ステートメントの前に出現する必要があります。

    とのことですので、限定的には設定できません。

    Option Strict Offを使用するよりも、問題を根本的に解決することをお勧めします。(そのために分からないことがあれば、当フォーラムで質問すればいいと思います。)

    2018年12月7日 4:00
  • こまってます さま よろしく。

    Option Strict で検索すると沢山の事例があります。  読んで見ましょう。
    尚、コードの式の左右の語句(語弊があるかな)にマウスを合わせるとその型が表示されますので、
    それが等しくなる様に変換する癖を付けた方が良いと思いますよ。

    Dim a As Integer = 1
    Dim b As String = 1
    ' a 1 共に System.Int32 / b は String
    ' 2行目 本来は = 1.Tostring / Tostring に合わせると String で左辺右辺同

    2018年12月7日 5:07
  • > 一つのファイルの中で、通常は「Option Strict On」でコードを記述し、どうしてもそれだとうまくいかない箇所だけ限定的に「Option Strict Off」にしたいのですが、そういうことってできるのでしょうか?

    「うまくいかない箇所」だけ別ファイルにして Option Strict Off を適用するわけにはいかなののですか? それがクラス定義の一部だとしても Partial Class として分けることはできると思うのですが。
    2018年12月7日 5:14
  • もちろん「Option Strict On」で記述できるようにするのが理想なんですが、どうしてもそれができない場合があるんです。
    現状、やむなく別ファイルに記述してますが、ファイル管理の観点から一つのファイルにまとめたいのです。
    2018年12月7日 6:19
  • 佐祐理さんと同じような回答になりますが、

    Option Strict ステートメント
    https://docs.microsoft.com/ja-jp/previous-versions/zcd4xwzs(v=vs.120)

    によると、

    「Option Strict ステートメントを使用する場合は、ファイル内の他のどのコード ステートメントよりも前に記述する必要があります。」

    とありますので、1つのファイル内で切り替えるのは無理でしょう。

    >もちろん「Option Strict On」で記述できるようにするのが理想なんですが、どうしてもそれができない場合があるんです。

    Option Infer Onを併用してもダメなんでしょうか? C#のdynamicと違って明示的に指定するわけではないので、型の書き忘れを防ぐ目的では使えなさそうですが・・・

    Option Infer ってなんだろう
    https://karua.at.webry.info/200703/article_13.html


    ★良い回答には質問者は回答済みマークを、閲覧者は投票を!

    2018年12月7日 7:54
    モデレータ
  • 要望的には、このあたりの話であろうかと思います。

    しかし現状の仕様ではファイルを分ける以外の方法が無いので、Partial Class なり拡張メソッドなりで、別ファイルに追いやるしか選択肢が無いでしょう。

    もしくは、プロジェクトのプロパティの [コンパイル] タブの警告構成で、遅延バインディングを「警告」通知にすることでお茶を濁すとか。

    Dim o As Object = CreateObject("ADODB.Connection")
    #Disable Warning BC42017
    MsgBox(o.ConnectionString)  'これはOK
    #Enable Warning BC42017
    MsgBox(o.ConnectionString)  'これは警告

    そもそも「Option Strict On にできない理由」というのは、どのような理由なのでしょうか。たとえば Option Strict On にしたうえで、CallByName で回避することを検討してみるとか…。


    2018年12月7日 8:45
  • > 現状、やむなく別ファイルに記述してますが、ファイル管理の観点から一つのファイルにまとめたいのです。

    たぶん「やむなく別ファイルに記述」以外の方法はないことは分かっているようですが、であれば、ここで聞く必要はないのと思うのですが・・・

    2018年12月8日 1:23
  • みなさん、ありがとうございました。
    やはり部分的に「Strict Off」にすることはできないのですね。。。

    ならば、「Strict On」で記述できるようにし、どうしてもそれが無理そうな場合は、皆さんのお知恵を拝借するかもしれませんが、その際はよろしくお願いします。

    2018年12月10日 1:19