2016-05-28 6 views
0

私はC#プログラミングの新人です。最近、かなり基本的な1つの問題にぶつかりました。変数lastServiceNoにSV_1のような文字列値を格納し、分割関数を使用して分割し、結果をindex.Basically indexという文字列配列に格納します。 [1]は文字列としていくつかの数値btを持っています。今はstringをintに変換したい。次のコードでは、解析関数に遭遇するまで期待どおりに動作します。なぜこの解析関数がインデックス[1]として0を返すのか理解できませんでした。誰かが問題を指摘できますか?なぜ解析関数はoを返しますか?

public string GenerateServiceNo() { 
    DataAccessLayer.DataAccessLayer dlObj= new DataAccessLayer.DataAccessLayer(); 
    string lastServiceNo = dlObj.GetLastServiceNo(); 
    string[] index = lastServiceNo.Split('_'); 
    int lastIndex = int.Parse(index[1]); 
    return "SV_"+(lastIndex++).ToString(); 
} 
+0

'read'-valueがSV_1で、戻り値(メソッドの)がSV_2である必要がある場合、lastIndex ++の代わりにlastindex:++ lastIndexを最初に増やす必要があります。 – Odrai

+0

私の質問はなぜ0を返す解析関数は、私はブレストポイントをintに置くlastIndex = int.Parse(index [1]);見つかったインデックス[0]にある数値があります。なぜそれをintに変換できないのですか? –

+0

'int lastIndex'または 'return ....'にブレークポイントを配置しましたか?あなたのコードはうまくいくはずです。 – Odrai

答えて

0

int.Parse(文字列s)数があまりにもデータサイズや文字列「S」の点で不具合が正しい数値形式でない場合は例外をスローします。

この方法が受け入れるフォーマットは" [WS] [サイン] [WS] "ある:

  • [WS] "「(一個の以上の空白のためのオプションであります)
  • [記号 "+" またはオプションである " - "

チェックhere完全な参照のために。

int.Parse(index [1])が0を返した場合、インデックス[1]は上記のトランスクリプトを使用して「[ws] [sign] 0 [ws]」に等しいことを保証できます。

しかし、あなたのコードを見ると、後でその値を増やすことなく、割り当て後にローカル変数をインクリメントしていると判断できます。おそらく、あなたはこの操作が0であってはならないということを意味しましたか?

そのような場合、私は、これはあなたが達成しようとしているものであると信じて:

public string GenerateServiceNo() 
{ 
    DataAccessLayer.DataAccessLayer dlObj= new DataAccessLayer.DataAccessLayer(); 

    string lastServiceNo = dlObj.GetLastServiceNo(); 
    string[] index = lastServiceNo.Split('_'); 
    int lastIndex = int.Parse(index[1]); 

    return string.Format("SV_{0}", ++lastIndex); 
} 

がインデックスを想定すると、[1] ==「0」、この方法は現在、「SV_1」を返します。

+0

私はすでにこれをコメントで記述しているので、これは彼が探しているとは思わない。おそらくあなたのコードはSarojにとって明らかにします。 – Odrai

+1

私の答えをもっと明確にするために修正しました:) –

+0

いいえまだ私が探していたものが得られませんでした。すべてがその解析機能のそばでうまくいきます。私はブレークポイントを置き、コードを分析して分析しました。溶液。私の質問はなぜparse関数は0を返しますindex [1] = 2 –

関連する問題