如何在C#4.0中使用类型作为函数参数?

问题描述:

Visual Studio中报告说 “‘PhoenixEngineTypes.BehaviorTypes’是‘类型’,但使用类似‘变量’”。如何在C#4.0中使用类型作为函数参数?

public void AddBehavior(BehaviorTypes type) 
    { 
     if (Enum.IsDefined(BehaviorTypes, type)) 
     { 
     switch (type) 
     { 
      case BehaviorTypes.render: 
      break; 
     } 
    } 

BehaviorTypes的定义是:

[Flags] 
enum BehaviorTypes : uint 
{ 
    default_behavior = 1 >> 0, 
    select = 1 >> 1, 
    render = 1 >> 2, 
    animate = 1 >> 3, 
    navigate = 1 >> 4, 
    rotate = 1 >> 5, 
    group = 1 >> 6, 
    scale = 1 >> 7, 
    collide = 1 >> 8, 
    kill = 1 >> 9, 
    attack = 1 >> 10, 
    audio = 1 >> 11, 
    all = UInt32.MaxValue 
} 

最后:

public static bool IsDefined(Type enumType, object value); 

我为什么能做到这一点呢? 我试过用typeof(type)它编译,但为什么浪费一个函数调用时,类型不变?我不应该直接使用令牌吗?

你需要调用IsDefined如下

Enum.IsDefined(typeof(BehaviorTypes), type) 

,因为它预计Type输入一个实例。 BehaviorTypes不是Type的实例,但您可以通过使用typeof得到相应的Type实例的类型。

http://msdn.microsoft.com/en-us/library/system.enum.isdefined.aspx

+0

那么,为什么VS错误说BehaviorTypes是一种类型,但使用像变量?混乱。 – 2012-07-26 22:40:51

+0

'行为类型'是一种类型。这是一个枚举。该方法需要引用Type类的一个实例,或者是一个变量(如果您愿意的话(有关一般类型和类Type的说法,有点混淆)。你可以做'var t = typeof(BehaviorTypes)'并传递't',如果这样做更清楚的话。 – 2012-07-26 22:48:21

+0

我看到类型和类型。卫生署! – 2012-07-26 22:55:54