2015-04-19 447 views
1

數組AllUnits是列表的列表。我正在嘗試將新對象添加到第二個列表中。我還有一個名爲EMilitaryUnits的枚舉,並且我有一個與Enumeration中的字符串名稱相同的類。而且我不知道如何轉化爲類我曾嘗試這樣解析枚舉類

_City.Owner.Military.AllUnits[(int)_UnitType].Add(new Object.GetType(_UnitType.ToString())); 

的枚舉和錯誤是

錯誤1 object.GetType()是「方法」,而是使用像type

+0

什麼是你想實現這個代碼'新Object.GetType(_UnitType.ToString())'? –

+0

op正在考慮GetType將返回輸入字符串的類型我的理解 –

+0

看起來,OP具有常規類,其名稱對應於'EMilitaryUnits'枚舉值聲明名稱,並尋求一種方法來創建與枚舉相對應的類的實例'_UnitType'的值的名字。 – Alex

回答

1

代替這部分:

new Object.GetType(_UnitType.ToString()) 

試試這個(與命名空間substiture您的類型定義):

Activator.CreateInstance(Type.GetType("<namespace>." + _UnitType.ToString())) 
+0

錯誤參數1:無法從'object'轉換爲'ConquerCA.Classes.Utility.Units.BaseUnit「 – Hui

+0

啊,對了,您可能還需要一個轉換,嘗試將轉換添加到(的BaseUnit)呢?也就是說,(的BaseUnit)Activator.Createinstance(....) – Nikolay

+0

太謝謝你了:) 工作正常 – Hui

1

鑑於:

OP具有普通班的名字對應EMilitaryUnits 枚舉值聲明的名稱,並尋求一種方式創建的 一個實例對應於的_UnitType值的枚舉名稱的類。

我的建議是建立一個靜態工廠來做到這一點,因爲類型將被固定和枚舉。下面是一個例子說明如何接近這一點。

public enum EMilitaryUnits 
{ 
    Cavalry, 
    CanonFodder, 
    // ... others 
}; 

public interface IMilitaryUnit 
{ 
    // rest 
} 

public class Cavalry : IMilitaryUnit 
{ 
    public Cavalry() {} 
    // ... rest 
} 

public class CannonFodder : IMilitaryUnit 
{ 
    public CannonFodder() {} 
    // ... rest 
} 

public static MilitaryUnitFactory 
{ 
    private static readonly Dictionary<EMilitaryUnits, Func<IMilitaryUnit>> map = 
     new Dictionary<EMilitaryUnits, Func<IMilitaryUnit>> { 
      { EMilitaryUnits.Cavalry,() => new Cavalry() }, 
      { EMilitaryUnits.CanonFodder,() => new CanonFodder() }, 
      // more for the others 
     }; 

    public static IMilitaryUnit Create(EMilitaryUnits kind) 
    { 
     return map[kind](); 
    } 
} 

用例:

_City.Owner.Military.AllUnits[(int)_UnitType].Add(MilitaryUnitFactory.Create(_UnitType));