[英]Using reflection to get attribute names in struct returns value__
我想用我的結構ItemTypes
中的所有可用項類型填充一個組合框:
public enum ItemTypes
{
Ore,
Ice,
Mineral,
Pi
}
如果我確實必須最終添加一個新項目類型,以免在2個地方添加新項目類型(不太可能,但仍然可能發生),我想使用反射來填充該組合框,而不是手動在列表中添加每個項目類型。 這是我的方法:
private void InitItemTypeComboBox()
{
ComboBoxItemTypes = new List<String>();
foreach (var itemType in typeof(EveItem.ItemTypes).GetFields())
{
ComboBoxItemTypes.Add(itemType.Name);
}
SelectedComboBoxItemType = ComboBoxItemTypes.ElementAt(0);
}
不幸的是, GetFields()
和itemType.Name
函數不僅返回結構體中的4種項目類型,而且還返回value__
作為第一個字段,因此我的組合框中有一個我不想要的額外元素。
我嘗試過一起使用GetFields()
的BindingFlags.DeclaredOnly
, BindingFlags.Public
和BindingFlags.Instance
標志,但是它仍然返回我不需要的第一個value__
元素。
除了手動跳過typeof(EveItem.ItemTypes).GetFields()
返回的第一個元素外,是否有其他方法可以指定我不希望該元素?
編輯:
如果更改了任何內容,我的ItemTypes
結構將嵌套在我的另一個公共類中。
您應該使用: var t = typeof(ItemTypes).GetFields().Where(k => k.IsLiteral == true);
您可以使用BindingFlags.Static
(例如,參見http://goo.gl/w3VndT )
所以
typeof(EveItem.ItemTypes).GetFields(BindingFlags.Static | BindingFlags.Public)
從枚舉獲取值的最簡單方法是使用內置的Enum.GetValues
方法。
https://msdn.microsoft.com/en-us/library/system.enum.getvalues%28v=vs.100%29.aspx
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.