Ste*_*ris 9 c# reflection operators
如何检查某种类型是否实现某个运算符?
struct CustomOperatorsClass
{
public int Value { get; private set; }
public CustomOperatorsClass( int value )
: this()
{
Value = value;
}
static public CustomOperatorsClass operator +(
CustomOperatorsClass a, CustomOperatorsClass b )
{
return new CustomOperatorsClass( a.Value + b.Value );
}
}
Run Code Online (Sandbox Code Playgroud)
以下两次检查应返回true:
typeof( CustomOperatorsClass ).HasOperator( Operator.Addition )
typeof( int ).HasOperator( Operator.Addition )
Run Code Online (Sandbox Code Playgroud)
有一种快速但肮脏的方法可以找到答案,它适用于内置类型和自定义类型。它的主要缺点是它依赖于正常流程中的异常,但它可以完成工作。
static bool HasAdd<T>() {
var c = Expression.Constant(default(T), typeof(T));
try {
Expression.Add(c, c); // Throws an exception if + is not defined
return true;
} catch {
return false;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1983 次 |
| 最近记录: |