ฉันกำลังเขียนโค้ดสำหรับUnconstrainedMelodyซึ่งมีวิธีการทั่วไปที่จะทำกับ enums
ตอนนี้ฉันมีระดับคงที่กับพวงของวิธีการซึ่งเป็นผู้เดียวที่มีความหมายที่จะใช้กับ "ธง" enums ฉันไม่สามารถเพิ่มสิ่งนี้เป็นข้อ จำกัด ได้ ... ดังนั้นจึงเป็นไปได้ว่าพวกมันจะถูกเรียกด้วย enum ประเภทอื่นด้วย ในกรณีนี้ฉันต้องการยกเว้น แต่ฉันไม่แน่ใจว่าจะโยนอันไหนดี
เพื่อให้เป็นรูปธรรมถ้าฉันมีสิ่งนี้:
// Returns a value with all bits set by any values
public static T GetBitMask<T>() where T : struct, IEnumConstraint
{
if (!IsFlags<T>()) // This method doesn't throw
{
throw new ???
}
// Normal work here
}
อะไรคือข้อยกเว้นที่ดีที่สุดในการโยน? ArgumentException
ฟังดูมีเหตุผล แต่เป็นอาร์กิวเมนต์ประเภทหนึ่งแทนที่จะเป็นอาร์กิวเมนต์ปกติซึ่งอาจทำให้สิ่งต่างๆสับสนได้ง่าย ฉันควรแนะนำTypeArgumentException
ชั้นเรียนของตัวเองหรือไม่? ใช้InvalidOperationException
? NotSupportedException
เหรอ? มีอะไรอีกไหม
ฉันค่อนข้างไม่สร้างข้อยกเว้นของตัวเองสำหรับเรื่องนี้จนกว่าจะเห็นได้ชัดว่าสิ่งที่ถูกต้องที่จะทำ