3

いくつかの VB.net コードを C# に変換しようとしていますが、この 1 行を変換しようとすると問題が発生します。

VB.NET

Dim myreg As Microsoft.Win32.Registry

私はそれが静的であることを知っているので、インスタンスを作成することはできませんが、C# への VB.NET コンバーターを試してみると、Web サイトで次のように表示されます。

Microsoft.Win32.Registry myreg = null;

エラーメッセージが表示されます:「Microsoft.Win32.Registry」は「タイプ」ですが、「変数」のように使用されます

VB.NET の関数の最後の部分では、myreg が使用されています。

Finally
  myreg = Nothing
End Try

関数全体は次のとおりです。

Imports System.Data.OleDb
Imports System.Data
Imports Microsoft.Win32.RegistryKey
Imports MyLogger 'custom reference, not worried about this.

Private Function getRegistryString(ByVal sVal As String, Optional ByVal sKey As String = "") As String
    Dim myreg As Microsoft.Win32.Registry
    Dim s As String
    Try
        s = myreg.LocalMachine.OpenSubKey(sKey).GetValue(sVal)
    Catch ex As Exception
        l.EventLog(ex.Message, EventLogEntryType.Error)
        Throw ex
    Finally
        myreg = Nothing
    End Try
    Return s
    s = Nothing
End Function
4

2 に答える 2

4

VB.NET では、共有(静的) クラスを定義する方法はありません。ただし、C# では、クラスが静的であることを指定できます。クラスが静的な場合、そのクラスのすべてのメンバーも強制的に静的になります。静的型の変数を宣言しようとすると、コンパイラはエラーを返します。

ただし、VB には共有クラスなどがないため、インスタンスにメンバーがないためまったく意味がありませんが、いつでも任意の型の変数を宣言できます。

変数を type として宣言する代わりに、単にクラス名自体Registryを使用するようにコードを変更する必要があります。変数はオブジェクトへの参照を格納しないため、Registry変数を に設定しても意味がありません。NothingいつもNothingです。

関数は次のようになります。

Private Function getRegistryString(ByVal sVal As String, Optional ByVal sKey As String = "") As String
    Dim s As String
    Try
        s = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(sKey).GetValue(sVal)
    Catch ex As Exception
        l.EventLog(ex.Message, EventLogEntryType.Error)
        Throw ex
    End Try
    Return s
End Function
于 2012-06-19T17:38:23.123 に答える
4

Microsoft.Win32.Registry静的クラスなので、インスタンス化できません。

http://msdn.microsoft.com/library/microsoft.win32.registry.aspx

編集:回答ではなくコメントにする必要がありました。私はまだこのサイトに慣れていないため、申し訳ありません。

于 2012-06-19T17:36:20.280 に答える