Türleri genel argümanlar olarak iletmekten başka bir şey yoksa, bir çözüm var. Ne yazık ki, C#, variadic jenerikleri desteklemiyor. Her bir genel aritmin işlevini tanımlamanız gerekir.
public static bool IsOfType<T>(this object obj) => obj is T;
public static bool IsOfType<T1, T2>(this object obj) => obj is T1 || obj is T2;
public static bool IsOfType<T1, T2, T3>(this object obj) => obj is T1 || obj is T2 || obj is T3;
public static bool IsOfType<T1, T2, T3, T4>(this object obj) => obj is T1 || obj is T2 || obj is T3 || obj is T4;
public static bool IsOfType<T1, T2, T3, T4, T5>(this object obj) => obj is T1 || obj is T2 || obj is T3 || obj is T4 || obj is T5;
public static bool IsOfType<T1, T2, T3, T4, T5, T6>(this object obj) => obj is T1 || obj is T2 || obj is T3 || obj is T4 || obj is T5 || obj is T6;
public static bool IsOfType<T1, T2, T3, T4, T5, T6, T7>(this object obj) => obj is T1 || obj is T2 || obj is T3 || obj is T4 || obj is T5 || obj is T6 || obj is T7;
public static bool IsOfType<T1, T2, T3, T4, T5, T6, T7, T8>(this object obj) => obj is T1 || obj is T2 || obj is T3 || obj is T4 || obj is T5 || obj is T6 || obj is T7 || obj is T8;
8'den fazla türe gereksiniminiz olduğundan şüphe duyuyorum; ancak, daha fazla aşırı yükleme tanımlayın.
Yapmanız gereken bir kod yazıyorsanız * temel * türlerine karşı bu tür bir tür denetimi, CLR'nin kendisi ile kullanılan genel yaklaşım, ['Type.GetTypeCode'] 'da (' https://msdn.microsoft.com/library/system 'adresindeki' switch '). type.gettypecode). Bunu temel olmayan türlere karşı çok fazla buluyorsanız, kodunuzda muhtemelen bunun için bir kısayola ihtiyaç duyduğu bir yanlışlık vardır. –
@JeroenMostert hakkında daha fazla yorum için, [türün sayısal olup olmadığına bakın] (https://stackoverflow.com/questions/1749966/c-sharp-how-to-determine-whether-a-type-is- bir sayı). – ryanyuyu
Sadece IsNumeric uzantısı işlevi oluşturun. Nesneyi çok sayıda rastgele türe karşı kontrol etmeniz gerçekten olası değildir. – Evk