【发布时间】:2016-04-13 16:19:02
【问题描述】:
有没有办法将类型数组传递给“is”运算符?
我正在尝试简化针对多种类型检查对象的语法。
类似:
public static function bool IsOfType(object Obj,params Type[] Types)
然而,这需要以下用法:
if(X.IsOfType(typeof(int),typeof(float))
{...}
我想做这样的事情:
if(X is {int,float})
或
if(X.IsOfType(int,float))
甚至
public static bool ISOfType<T[]>(this object Obj){...}
if(X.ISOfType<int,float>())
我认为它们都是不可能的。
【问题讨论】:
-
如果您编写的代码必须针对 basic 类型进行大量类型检查,CLR 本身使用的常用方法是
switch在Type.GetTypeCode。如果您发现自己经常针对非基本类型执行此操作,那么您的代码可能有问题,首先需要对此进行速记。 -
要进一步@JeroenMostert 评论,这是check if the type is numeric 的方法。
-
只需创建 IsNumeric 扩展函数。您不太可能真的需要针对多种任意类型检查对象。