Visual Basic 中学校 掲示板 投稿の管理
タグのない投稿を抽出
統計
RSS
Visual Basic 中学校
投稿一覧
拡張メソッドが突然エラーに
この投稿へのリンク
https://keijiban.umayadia.com/ThreadDetail.aspx?ThreadId=30833#CommentId85591
この投稿の削除
削除パスワード
削除する
コメント本文
投稿者
しまも
 (社会人)
投稿日時
2023/1/14 15:09:37
>機微情報を取り除いて、必要最小限の実験コードにまで縮小した
>サンプルコードを提示してもらえると追跡しやすいのですけれど、難しいですかね。
⇒ありがとうございます。もし見ていただけるならとてもありがたいです。
ただ、要領がわからなくて……どのようにすればよいでしょうか?
機微情報にあたるようなものは特にありません。
>プロジェクトのプロパティの[参照設定]タブ内にある「インポートされた名前空間」あるいは
>.vb ファイル先頭に書かれる Imports 宣言によって、.NET の標準ではない
>自作コードの名前空間が追加されていたりはしますか?
上で示したDBBookOperationやDataTableExtensionsとは別のファイルの先頭に、
Imports VocabularyBuilder.Html
と書いているのはあります。「VocabularyBuilder」はソリューション名・プロジェクト名、「Html」は自作クラスです。
>さきほどの修正で
> = Global.ルート名前空間名.DatatableExtensions.MinimumLackedNumber(dtBook, "bookCode")……①
>とすることで呼べるようになったコードを
> = Global.ルート名前空間名.MinimumLackedNumber(dtBook, "bookCode") 'モジュール名省略……②
> = DatatableExtensions.MinimumLackedNumber(dtBook, "bookCode") 'ルート名前空間省略……③
> = MinimumLackedNumber(dtBook, "bookCode") 'メソッド名のみ……④
>に変えてみてください。この中に呼べなくなるパターンはありますか?
すみません、私が
> ⇒◎これでなら動きました!
と言ったのは、①でなく③でした。
改めて①~④を試したところ、すべて呼ぶことができました。
>> 他にもう1つ、DataTableの拡張メソッドがあり、同様のエラーが出ていますが、省略しました。
>そのエラーが、結果的に他のエラーを誘発する要因になっていた可能性も無いとは言えず。
もう一つの拡張メソッドは次のものです。
前の2つと同様に、通常のメソッドとしての呼び出しに変えたら動きました。
''' <summary>
''' 新旧DataTableを比較し、行・列数や値が違っていたら真を、同じであれば偽を返す。
''' </summary>
<System.Runtime.CompilerServices.Extension>
Public Function HasValueChanged(dt1 As DataTable, dt2 As DataTable) As Boolean
Dim rowCount1 As Integer = dt1.Rows.Count
Dim clmCount1 As Integer = dt1.Columns.Count
Dim rowCount2 As Integer = dt2.Rows.Count
If rowCount1 = 0 AndAlso rowCount2 = 0 Then
Return False
ElseIf rowCount1 <> dt2.Rows.Count Then
Return True
End If
For rowIndex = 0 To rowCount1 - 1
For clmIndex = 0 To clmCount1 - 1
Dim value1 = dt1.Rows(rowIndex).Item(clmIndex).ToString
Dim value2 = dt2.Rows(rowIndex).Item(clmIndex).ToString
If value1 <> value2 Then
Return True
End If
Next
Next
Return False
End Function
>Public Function MinimumLackedNumber において
> Dim max = MaxNumber(dt, column)
>という呼び出しが行われていますが、これを
> Dim max = dt.MaxNumber(column)
>の拡張メソッド構文で呼び出すことはできるのでしょうか。
⇒こちらは拡張メソッド構文で呼び出すことができました。
あともう一つ、フォームデザイナーを開こうとすると、次のようなエラー(?)画面になり、デザイナー画面が開けなくなっていることに気づきました。
実行はできるのですが。フォームはいくつかありますが、一部を除きほとんどのフォームでこのようになります。
そういえば、拡張メソッドのエラーが出るようになったのは、フォームがこのようになってからのような気がします。
(ここに書かれていることは私にはちんぷんかんぷんです……。)
--------------------------------------------------------------------------------
×データが失われる可能性を防ぐため、デザイナーの読み込み前に以下のエラーを解決する必要があります。
×1 個のエラー 無視して続行する このページが表示されている理由
×エラー HRESULT E_FAIL が COM コンポーネントの呼び出しから返されました。
このエラーのインスタンス (1)
1。 コール スタックの表示
場所 System.Runtime.InteropServices.Marshal.ThrowExceptionForHRInternal(Int32 errorCode, IntPtr errorInfo)
場所 Microsoft.VisualStudio.LanguageServices.Implementation.Utilities.Exceptions.ThrowEFail()
場所 Microsoft.VisualStudio.LanguageServices.Implementation.CodeModel.CodeTypeRef.LookupTypeSymbol()
…(以下続く。投稿文字数制限のためとりあえず省略します)…
このエラーのヘルプ
MSDN ヘルプ
このエラーに関するフォーラムの投稿
MSDN フォーラムでこのエラーに関連する投稿を検索
--------------------------------------------------------------------------------