2012-05-17 102 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; } 
}