簡體   English   中英

使用反射獲取結構中的屬性名稱將返回value__

[英]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.DeclaredOnlyBindingFlags.PublicBindingFlags.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM