C# 报告类型参数中错误的最佳实践?

C# 报告类型参数中错误的最佳实践?,c#,.net,generics,C#,.net,Generics,对于在.NET中报告泛型方法的无效类型参数,是否有特定的最佳实践或其他建议 (具体示例:我有一个带有签名的方法 public static T GetRoles<T> (this WindowsIdentity id) where T: struct public static T GetRoles(此WindowsIdentity id),其中T:struct 然后,我对T进行了一些反思,以确保它既是(a)一个枚举,也是(b)一种正确的枚举,因为这不是我可以在where子句中使

对于在.NET中报告泛型方法的无效类型参数,是否有特定的最佳实践或其他建议

(具体示例:我有一个带有签名的方法

public static T GetRoles<T> (this WindowsIdentity id) where T: struct
public static T GetRoles(此WindowsIdentity id),其中T:struct
然后,我对T进行了一些反思,以确保它既是(a)一个枚举,也是(b)一种正确的枚举,因为这不是我可以在where子句中使用的约束。)


对于大多数参数错误,我会做一件显而易见的事情,抛出一个带有适当参数名和消息的ArgumentException,除非类型参数不是常规参数,尝试抛出一个新的ArgumentException(“oops”,“t”)会使代码分析器抱怨参数名不是参数名。当然,如果没有更好的方法,这不会阻止我,但如果在这方面有指定或推荐的做法,我想知道它是什么。

通过检查可转换接口,可以充分约束枚举:

where T : struct, IConvertible

这将为您节省一些反思工作。

(即使这不是一个正式的实践,当然我仍然对你们的各种解决方案/推理感兴趣。)在您提到的具体案例中,可能值得研究一下库。回答@PaulPhillips-oo,这很聪明。我还有一些其他的情况要处理,但不太多,通过后处理器运行程序集很有吸引力,唉,但是知道它存在很好。@knaki02-谢谢。我想从那时起事情就没有改变过,我还将定义我自己的TypeArgumentException。