Saat ini saya sedang menulis beberapa kode untuk UnconstrainedMelody yang memiliki metode umum untuk dilakukan dengan enum.
Sekarang, saya memiliki kelas statis dengan banyak metode yang hanya dimaksudkan untuk digunakan dengan enum "flags". Saya tidak dapat menambahkan ini sebagai pembatas ... jadi mungkin saja mereka akan dipanggil dengan jenis enum lain juga. Dalam hal ini, saya ingin memberikan pengecualian, tetapi saya tidak yakin mana yang harus dibuang.
Hanya untuk membuat ini menjadi konkret, jika saya memiliki sesuatu seperti ini:
// 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
}
Apa pengecualian terbaik untuk dilempar? ArgumentException
terdengar logis, tapi ini adalah tipe argumen daripada argumen normal, yang dapat dengan mudah membingungkan banyak hal. Haruskah saya memperkenalkan TypeArgumentException
kelas saya sendiri ? Gunakan InvalidOperationException
? NotSupportedException
? Ada yang lain?
Saya lebih suka tidak membuat pengecualian saya sendiri untuk ini kecuali hal ini jelas merupakan hal yang benar untuk dilakukan.