おねぃさんクラスを再度書いてみた。

といっても可及的速やかかどうかは知りません!w
コンパイルエラーを排除するだけのことに苦労しました。
どうしても ; 忘れますw
プロパティへの感覚が若干変ですw
ただのListでやりたかっただけです(ぉ


using System;
using System.Collections.Generic;

// 名前空間どうすっぺさ?
namespace Torikobito
{

/// <summary>
/// クロークの番号札の様に整数を管理するクラスです。
/// </summary>
public class Cloak
{

/// <summary>
/// 整数を管理するリスト。
/// </summary>
List<int> _tags;


/// <summary>
/// Cloak クラスの新しいインスタンスを初期化します。
/// </summary>
public Cloak()
: base()
{
this._tags = new List<int>();
}


/// <summary>
/// 使用できる最小の整数を返しますが、その整数は使用されません。
/// </summary>
/// <returns>使用できる最小の整数。</returns>
public int Peek()
{
if (this._tags.Count == 0)
{
return 1;
}

int minReleasedTagIndex = this._tags.FindLastIndex(new Predicate<int>(delegate(int tag) { return tag < 0; }));

if (minReleasedTagIndex == -1)
{
return this._tags.Count + 1;
}
else
{
return Math.Abs(this._tags[minReleasedTagIndex]);
}
}


/// <summary>
/// 使用できる最小の整数を返します。
/// </summary>
/// <returns>使用できる最小の整数。</returns>
public int Acquire()
{
int tag = this.Peek();

this._tags.Remove(-tag);
this._tags.Add(tag);
this._tags.Sort();

return tag;
}


/// <summary>
/// 整数を返却し、使用可能な状態にします。
/// </summary>
/// <param name="tag">返却する整数。</param>
/// <returns>返却できた場合は True、それ以外はFlase。 </returns>
public bool Release(int tag)
{
if (!this._tags.Contains(tag))
{
return false;
}

this._tags.Remove(tag);
this._tags.Add(-tag);
this._tags.Sort();

return true;
}


/// <summary>
/// すべての整数の状態をクリアします。
/// </summary>
/// <remarks>すべての整数が使用されていない状態に戻ります。</remarks>
public void Clear()
{
this._tags.Clear();
}


/// <summary>
/// 使用中の整数のリストを返します。
/// </summary>
/// <returns>配布した値のリスト。</returns>
public List<int> GetAcquiredTags()
{
return this._tags.FindAll(new Predicate<int>(delegate(int tag) { return tag > 0; }));
}


/// <summary>
/// 返却した整数のリストを返します。
/// </summary>
/// <returns>返却した整数のリスト。</returns>
public List<int> GetReleasedTags()
{
List<int> result = new List<int>();

List<int> tags = this._tags.FindAll(new Predicate<int>(delegate(int tag) { return tag < 0; }));

foreach (int tag in tags)
{
result.Add(Math.Abs(tag));
}

return result;
}


} // class
} // namespace