0

特に、PC を新しい OU に移動し、DWORD 値をレジストリに書き込み、移動が成功したか失敗したかを示す Win Forms アプリケーションがあります。残りの操作が完了すると、PC が再起動します。再起動すると、アプリケーションが再起動し、成功したものと失敗したものについてレジストリ値をチェックし、フォームに「チェック」または「X」を表示します。

DWORD値が存在するかどうかをテストしてから、それが「1」であるかどうかを読み取る方法を知りたいです。私は自分でこれを簡単にして、アプリケーションに文字列値を書かせることができることを理解していますが、私は学ぼうとしています.

Visual Studio を使用して、DWORD 値が null かどうかを確認しようとすると、警告が表示されます。次の警告が表示されます。

int 値を null にすることはできません。レジストリに存在するかどうかをテストして、例外を回避するにはどうすればよいでしょうか? 以下の私のコードを参照してください。

RegistryKey domainJoin = Registry.LocalMachine.OpenSubKey
                   (@"SOFTWARE\SHIELDING\5", RegistryKeyPermissionCheck.ReadWriteSubTree);


    //If the domain join was attempted, check outcome...
            if (domainJoin != null)
            {
                //Check if move to OU was successful
                int ouMoveVal = (int)domainJoin.GetValue("movePC");
                if (ouMoveVal != null) <-----HERE IS WHERE I GET THE WARNING
                {
                    //If PC move to new OU was successful
                    //show 'check' mark
                    if (ouMoveVal == 1)
                    {
                        picChkOU.Visible = true;
                    }
                    //If PC move to new OU was NOT successful
                    //show 'X' mark
                    else
                    {
                        picXOU.Visible = true;
                    }
                }
4

3 に答える 3

2

nullable int(つまりint?GetValuereg 値が存在しない場合にデフォルト値を取るオーバーロード) を使用して、次のようなことを行うことができます。

int? ouMoveVal = (int?) domainJoin.GetValue("movePC", new int?());

if (ouMoveVal.HasValue)

nullable の詳細: https://msdn.microsoft.com/en-us/library/b3h38hb0%28v=vs.110%29.aspx?f=255&MSPPError=-2147217396

于 2015-10-21T11:57:22.093 に答える
1

objectにキャストする前に null がチェックされるように、チェックの順序を変更しintます。

//Check if move to OU was successful
object ouMoveVal = domainJoin.GetValue("movePC");

if (ouMoveVal != null)
{
    // try to convert to int here and continue...

nullこれは、キーが存在しないことを示す、返されたオブジェクトによって提供される情報を利用できることを意味します。

その後、チェック後Int32.TryParseかどうかを確認できます。intnull

于 2015-10-21T11:57:36.220 に答える