可能重複:
When are two enums equal in C#?IComparable的與枚舉發送作爲一般類型參數(C#)
我有以下的類作爲一個簡單的狀態機的一部分。
請注意,所有泛型類型參數都必須是枚舉。這已經在構造函數中執行(未在此處顯示)。
// Both [TState] and [TCommand] will ALWAYS be enumerations.
public class Transitions<TState, TCommand>: List<Transition<TState, TCommand>>
{
public new void Add (Transition<TState, TCommand> item)
{
if (this.Contains(item))
throw (new InvalidOperationException("This transition already exists."));
else
this.Add(item);
}
}
// Both [TState] and [TCommand] will ALWAYS be enumerations.
public class Transition<TState, TCommand>
{
TState From = default(TState);
TState To = default(TState);
TCommand Command = default(TCommand);
}
public sealed class TransitionComparer<TState>:
IComparer<TState>
{
public int Compare (TState x, TState y)
{
int result = 0;
// How to compare here since TState is not strongly typed and is an enum?
// Using ToString seems silly here.
result |= x.From.ToString().CompareTo(y.From.ToString());
result |= x.To.ToString().CompareTo(y.To.ToString());
result |= x.Command.ToString().CompareTo(y.Command.ToString());
return (result);
}
}
上述聲明編譯,但我不知道這是否是處理已經在爲泛型類型參數已經通過枚舉的正確途徑。
注意:比較功能不需要記住排序。相反,它需要檢查確切的重複。
謝謝。我將此作爲未來項目的圖書館編寫,其中一些可能對性能至關重要。你會在這種情況下采取任何不同的方式嗎?是的,你是對的,比較器本身沒有被使用在任何地方。 –
@RaheelKhan:我會添加一個修改。 –
感謝Jon,糾正我的錯誤,實現並鏈接到UM!與此同時,我將用拳擊原型並觀察UM。 –