0

作成された従業員インスタンスごとに従業員数を増やす単純な従業員クラスを作成しようとしています。これは非常に単純ですが、現在の年 (DateTime オブジェクトを使用) を使用して構築する必要がある従業員番号を作成し、現在の従業員数に先行ゼロを埋め込んで、従業員番号が常に 8 文字の長さになるようにするよう求められたことを除けば、たとえば、10 番目の従業員が 2013 年に作成された場合、従業員番号は 20130010 になります。従業員カウンターを毎年リセットする必要はありません。

今、私はすべてをやった

string year = DateTime.Now.ToString();

従業員数を増やしましたが、残りのギャップを0で埋める方法についてはとても混乱しています。

おそらく非常に簡単な解決策であるため、これは非常にイライラするため、どんな助けもいただければ幸いです。

ありがとうございました

4

4 に答える 4

2

それは非常に単純であるべきです。

ただし、完全な日付ではなく、年を使用してください。

以下のコード スニペット:

string id = DateTime.Now.Year.ToString() + 10.ToString("0000");
于 2012-09-11T07:27:51.993 に答える
2

私があなたを正しく理解していれば、おそらくあなたはあなたの番号に先行ゼロを追加したいだけでしょう.

string year = DateTime.Now.Year.ToString();
int EmpNumber = 1;
string newNumber = year + EmpNumber.ToString("D4");

出力は次のようになります。"20120001"

表示される可能性があります:方法: 数値に先行ゼロを埋め込む

于 2012-09-11T07:28:01.100 に答える
0

String.PadLeftメソッドを調べる必要があります。

string employeeId = string.Concat(DateTime.Now.Year.ToString(), (lastEmployeeId + 1).ToString().PadLeft(4, '0');

スレッド化/同期の問題 (2 人の従業員が同時に作成され、同じ従業員 ID が割り当てられている) が発生する可能性があるため、Oracle シーケンスまたは SQLServer auto_increment の使用を検討することをお勧めします。

また、従業員の数を追跡することは、必要であることが判明した場合にのみ最適化として行う必要があります。パフォーマンスの問題がない場合は、COUNT(データベース上またはメモリ内のList<Employee>) ステートメントを使用して従業員数を取得できます。

従業員のリストと従業員数の両方を追跡することは、Single Source of Truthに違反しています。事態が複雑になると、問題が発生することをお約束します。ある時点で、2 つのカウントが (何らかの理由で) 異なります...

于 2012-09-11T07:32:42.310 に答える
0

次のようなものを使用したい:

var employeeId = string.Format("{0}{1:D4}", DateTime.Now.Year, runningNumber);
于 2012-09-11T07:30:00.493 に答える