他の人がすでに述べたように、あなたのコードは意味がありません。部屋の配列を作成し、すべての要素を初期化しないままにします ( null
)。次に、その配列内に部屋が存在するかどうかを確認します。また、ループでは、要素の名前が異なるたびに新しい部屋を「追加」します。メソッドの範囲外にある配列に何かを追加する方法がわかりませんaddRoom
。これがあなたの実際のコードでないことを願っています!
そのため、最初に room 配列をbtnAddRm_Click
メソッドのスコープ外のクラスのフィールドとして作成する必要があります。
部屋を追加したいので、配列を使用しないでください。List<Room>
代わりにaを使用してください。それ以外の場合は、配列のいくつの要素が既に部屋で初期化されているかを知る必要があります。また、数が配列の初期サイズを超える場合は、配列を大きくする必要があります。これはまさにList<Room>
あなたのためにできることです。
btnAddRm_Click
その後、イベント ハンドラーは LINQ を使用して、同じ名前の部屋が存在するかどうかを確認できます。String.Compare(name1, name2)
の代わりに使用する必要があることに注意してくださいname1 == name2
。
private List<Room> _theRooms = new List<Room>();
private void btnAddRm_Click(object sender, EventArgs e)
{
if (!_theRooms.Any(r => string.Compare(r.Name, txtName.Text, StringComparison.CurrentCultureIgnoreCase) == 0))
{
addRoom();
}
}
部屋名が部屋の一意のキーであると仮定すると、 a を使用しHashSet<Room>
て部屋を追加することもできます。HashSet
部屋の存在を確認します。ただしRoom
、クラスは上書きEquals
してから、部屋名が等しいかどうかを確認するGetHashCode
必要があります。Equals