1

VB.Net で記述されたレガシー コードをコピーしました。これを C# に変換すると、次のようになります。

///<summary>
    ///Test whether SSAC should be serialized
    ///</summary>
    public virtual bool ShouldSerializeSSAC()
    {
        if (_shouldSerializeSSAC)
        {
            return true;
        }
        return (_sSAC != (SSAC_Type)null);
    }

null 非許容型であるため変換できないというエラーがスローされます。SSAC のコードは次のとおりです。

[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.6.81.0"), System.SerializableAttribute()]
public enum SSAC_Type
{

    ///<remarks/>
    A,

    ///<remarks/>
    B,

    ///<remarks/>
    C,

    ///<remarks/>
    D,

    ///<remarks/>
    E,

    ///<remarks/>
    F,

    ///<remarks/>
    G,

    ///<remarks/>
    H,

    ///<remarks/>
    J
}

VB.Net では、この関数は次のようになりました。

Public Overridable Function ShouldSerializeSSAC() As Boolean
        If _shouldSerializeSSAC Then
            Return True
        End If
        Return (_sSAC <> CType(Nothing, SSAC_Type))
    End Function

SSACクラスは次のとおりでしたが:

 <System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.6.81.0"),
 System.SerializableAttribute()>
Public Enum SSAC_Type

    '''<remarks/>
    A

    '''<remarks/>
    B

    '''<remarks/>
    C

    '''<remarks/>
    D

    '''<remarks/>
    E

    '''<remarks/>
    F

    '''<remarks/>
    G

    '''<remarks/>
    H

    '''<remarks/>
    J
End Enum

C# コードを更新してこのエラーを修正するにはどうすればよいですか?

4

2 に答える 2

2

「修正」という用語は、おそらく VB コードの意図しない動作だったので、ここで使用するのに最適な用語ではないかもしれません。しかし、「修正」とは、どうすれば同じように動作させるかという意味である場合、答えは C# コードが を返す必要があるということ(_sSAC != SSAC_Type.A)です。実際に修正するには、 (nullable)_sSACとして宣言する必要があります。VB で機能した理由は、VBでは C#と完全に同等ではないためです。実際には、特定の型のデフォルト値を意味するため、列挙型のような整数の場合、デフォルトは 0 です。SSAC_Type?_sSAC.HasValueNothingnullNothing

于 2016-04-10T19:13:21.200 に答える