2012-05-17 64 views
0

编辑:希望这有助于理解我正在尝试做什么。C#:使用枚举将一个对象投射到特定的对象

我有一个返回对象的对象,在这个对象内我有一个int值, 基于这个int值我想能够使用枚举来告诉我什么具体对象应该案例这个对象至。

Enum拥有所有可能的肠衣。

我将收到一个通用对象(类型为object),它可以是许多不同的更具体的对象之一,在这种情况下,类型为Model。我希望能够在对象内部查看一个int值,它会告诉我要使用哪个转换。

例如一个对象A,它的对象中有一个int值设置为'2',我想根据我的枚举值2(它被设置为特定类型)将此对象转换为我的特定对象。

这可能很简单,但不能解决你如何做到这一点,如果可能的话,谢谢。

谢谢。

+1

我已经尽我所能地回答了,但是您并没有真正提供足够的信息来帮助您。 –

+0

“enum cast”是什么意思?你能提供一些示例代码吗? –

+0

@Jon Skeet,我已经添加了一些关于我想要做的事情的信息,我真的希望它有帮助。 – user101010101

回答

2

如果您的意思是您想在执行时更改objectA变量的类型,答案是否定的。编译器需要知道在编译时完成的所有类型的变量类型变量

如果您使用的是C#4,则可以使用dynamic来帮助您 - 但您试图实现的目标并不十分清楚。在很多情况下,创建一个所有类型实现的通用接口是一个更好的主意,然后只需将变量的类型设置为接口类型即可。这并不是普遍适用的,但它在工作时是个好主意。

2

您是否试图将一个枚举类型转换为另一个枚举?

Enum Type1 
    { 
     A 
     B 
    }; 

    Enum Type2 
    { 
     A, 
     B 
    }; 

    Type1 type1 = Type1.A; 
    if(Enum.IsDefined(typeof(Type2), type1.A.ToString()) 
    { 
     Type2 type2 = (Type2)Enum.Parse(typeof(Type2), type1.A.ToString()); 
     //type2 now holds Type2.A 
    } 

编辑

如果你想在运行时改变对象的类型,这是不可能的。

如果你只是表示转换,(相同的对象不同的表示对应于实现的接口,基类等),这是可能的,但在这里对象类型不会改变。

+0

嗯,他不是真的试图将一个对象投射到另一个基于枚举值(国际海事组织拥有所有可能的铸件枚举) – V4Vendetta

1

这很难理解你想要什么。但这是我的承担。所有的类都需要实现接口ITypeContainer才能提取枚举值。

void Main() 
{ 
    .... 
    .... 
    CastToType((ITypeContainer)myObject); 
} 

public void CastToType(ITypeContainer obj) 
{ 
    switch (obj.ObjectType) 
    { 
     case TypeEnum.Test1: 
      var o1 = (Test1)obj; 
      break; 
     case TypeEnum.Test2: 
      var o2 = (Test2)obj; 
      break; 
    } 
} 

public class Test1 : ITypeContainer 
{ 
    public TypeEnum ObjectType{ get; set; } 
} 

public class Test2 : ITypeContainer 
{ 
    public TypeEnum ObjectType{ get; set; } 
} 

public enum TypeEnum 
{ 
    Test1, 
    Test2, 
    Test3 
} 

public interface ITypeContainer 
{ 
    TypeEnum ObjectType{ get; set; } 
}