2
   public string getTime()
   {
       StringBuilder RetString = new StringBuilder();
       RetString.Append(Hours.ToString().PadLeft(2, '0') + "-" + Min.ToString().PadLeft(2, '0') + "-" + AMPM.PadLeft(2, '0'));
       return RetString.ToString();
   } 

これを使用して、時間を(文字列形式で)フォーム文字列変数に戻そうとしています。時間を入力するユーザー設定があり、時間はこのクラスに保存されます。現在行っていることは、そのデータを作業中のフォームに取り込むことだけです。データがクラスに入り、に保存されていることを確認しました変数。

私が得るエラーは次のとおりです。

CSharp_Null

何が問題なのかよくわかりません。もちろん、変数を宣言しています

    private int Hours;
    private int Min;
    private string AMPM;

セットのセットアップを取得しました:

public int _hours
    {
        get
        {
            return Hours;
        }
        set
        {
            if (value <= 12 && value >= 1)
            {
                Hours = value;
            }
            else
                Hours = 0;
        }
    }

    public int _min
    {
        get
        {
            return Min;
        }
        set
        {
            if (value <= 59 && value >= 1)
            {
                Min = value;
            }
            else
                Min = 0;
        }
    }

    public string ampm
    {
        get
        {
            return AMPM;
        }
        set
        {
            if (AMPM == "AM" || AMPM == "PM")
            {
                AMPM = value;
            }
            else
                AMPM = "";
        }
    }

そして私のクラスへの呼び出し:

string timefromclass;
timefromclass = timec.getTime();

それができると思う唯一のことは、時間を保存するクラスへの私の呼び出しです

C_Time time = new C_Time();

しかし、他の形式では、別のものもセットアップします。

C_Time timec = new C_Time();

おそらく、空のインスタンスから時間を取得しようとしていますか?

編集:

public void setTime(int hours, int min, string aMPM)
    {
        Hours = hours;
        Min = min;
        AMPM = aMPM;

それは、私がその変数を割り当てた唯一の場所です。

4

4 に答える 4

4

AMPMコードのどこかで初期化しますか。そうでない場合は null (参照型変数のデフォルト値) になりPadLeft、それを呼び出すと NRE が返されます。

于 2012-04-10T15:56:32.577 に答える
3

あなたのコードから、あなたのAMPMフィールドはnull.

コードで呼び出していないセッター以外の場所でインスタンス化していないようです。

初期化すると問題が解決するはずです:

private string AMPM = string.Empty;
于 2012-04-10T15:57:02.367 に答える
1

他の人が指摘したようAMPMに、問題です。このように定義する必要があります

private string _ampm;

public string AMPM
{
    get
    {
        return _ampm ?? ""; // Returns "" if _ampm == null
    }
    set
    {
        _ampm = value;
    }
}

次に、プロパティを操作します

AMPM.PadLeft( ...

しかし、なぜ使用しないのですか

String.Format("{0:00}-{1:00}-{2}", Hours, Min, AMPM.PadLeft(2, '0'));

列挙型で作業する方が安全です

public enum AmPm
{
    Undefined,
    AM,
    PM
}

これにより、有効なエントリが明確に列挙されます。それ以外の場合は、「AM」の代わりに「午後」や「午前」などを入力できます。

于 2012-04-10T16:20:05.373 に答える
1

取得しているエラーは、初期化されていないためnullである「参照型」を読み込もうとしていることを意味します。

intは「値型」であり、値型は null 値を表すことはできません。

stringは「参照型」であり、クラスにある唯一の参照型です ( AMPM)。これが問題の場所に違いありません。

AMPMエラーを停止するには、初期化する必要があります。まだコンストラクターがない場合は、クラスにコンストラクターを追加すると、初期化を処理するのに適した方法になります。例えば:

public C_Time()
{
    AMPM = "";
}
于 2012-04-10T16:15:32.920 に答える