私はコンポーネントのコレクションを持っています。コンポーネント名はそれぞれのコンポーネント固有のものです。ユーザーがこのコレクションに新しいコンポーネントを追加すると、既存のコンポーネントの数に応じて、コンポーネント名が1ずつ増えます。ユーザーがコンポーネントを削除すると、新しく追加されたコンポーネントに与えられたコンポーネント名は依然として一意でなければなりません。ObservableCollectionに追加するときのプロパティ名のインクリメント
今はコレクションのコンポーネントをループして、それぞれの合計量を取得し、追加するコンポーネントと等しいすべてのカウンタをインクリメントします。
private void OnComponentAdded()
{
if (SelectedComponent != null)
{
var numberOfDuplicates = 0;
foreach (var item in ComponentsForEquipment)
{
if (item.ComponentId == SelectedComponent.ComponentId)
{
numberOfDuplicates++;
}
}
numberOfDuplicates++;
SelectedComponent.ComponentName = SelectedComponent.ComponentType + numberOfDuplicates.ToString();
var match = ComponentsForEquipment.Where(c => c.ComponentName == SelectedComponent.ComponentName).SingleOrDefault(); //componentname already exists
if (match == null)
{
ComponentsForEquipment.Add(SelectedComponent);
}
}
else
{
MessageBox.Show("Please select a component before adding.", "Message", MessageBoxButton.OK, MessageBoxImage.Information);
}
}
ただし、ユーザーがコンポーネントを削除してからもう一度追加すると、コンポーネント名は一意ではありません。したがって、if文を追加して、コンポーネント名による一致を確認しました。問題は、ユーザーが以前に追加したコンポーネントを削除した場合、生成される新しい名前は一意ではないということです。ここで
だから、3つの重複要素がコレクション内に存在する場合、第4回は1を確実にするために端部に取り付けられた「4」とコンポーネント名を持つ必要があります追加しました名前は残りの部分からユニークです。
コレクションを最初にチェックしてください。ループに入ることはありません。デバッグは、カウンタが1であるためif文をチェックします。つまり、平均カウンタはforeachループ後に1回だけインクリメントされます。 – NSKBpro
次のIDを表すカウンタを持ち、アイテムが追加されるたびにインクリメントするオプションですか?つまり、重複することはありません(ただし、アイテムが削除された場合は、IDに「ギャップ」が生じることがあります)。 – mjwills