0

编辑:希望这会有所帮助,了解我想要做什么。

我返回了一个 Object 类型的对象,在这个对象中我有一个 int 值,基于这个 int 值,我希望能够使用枚举来告诉我应该将该对象应用于哪个特定对象。

Enum 包含所有可能的大小写。

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

例如,一个有 objectA 并且它在对象内有一个 int 值设置为“2”,我想根据我的枚举值 2 将此对象转换为我的特定对象,该值设置为特定类型。

这可能非常简单,但无法弄清楚您将如何做到这一点,如果可能的话,谢谢。

谢谢。

4

3 回答 3

2

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

如果您使用的是 C# 4,您可能可以使用dynamic来帮助您 - 但目前还不清楚您想要实现的目标。在许多情况下,最好创建一个所有类型都实现的通用接口,然后将变量的类型设置为接口类型。这不是普遍适用的,但是当它起作用时它是一个好主意。

于 2012-05-17T09:10:02.433 回答
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
    }

编辑

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

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

于 2012-05-17T09:12:27.093 回答
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; }  
}
于 2012-05-17T09:36:39.550 回答