使用反射获取struct returns 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
函数 return 不仅是我结构中的 4 种项目类型,它还 returns value__
作为第一个字段,所以我的组合框中有一个我不想要的额外元素。
我试过同时使用 GetFields()
的 BindingFlags.DeclaredOnly
、BindingFlags.Public
和 BindingFlags.Instance
标志,但第一个 [=] 仍然是 return 17=] 我不想要的元素。
除了手动跳过由 typeof(EveItem.ItemTypes).GetFields()
编辑的第一个元素 return 之外,是否有其他方法可以指定我不想要此元素?
编辑:
如果它改变了什么,我的 ItemTypes
结构嵌套在我的另一个 public 类.
中
你应该使用: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
我想用我的结构中的所有可用项目类型填充一个组合框 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
函数 return 不仅是我结构中的 4 种项目类型,它还 returns value__
作为第一个字段,所以我的组合框中有一个我不想要的额外元素。
我试过同时使用 GetFields()
的 BindingFlags.DeclaredOnly
、BindingFlags.Public
和 BindingFlags.Instance
标志,但第一个 [=] 仍然是 return 17=] 我不想要的元素。
除了手动跳过由 typeof(EveItem.ItemTypes).GetFields()
编辑的第一个元素 return 之外,是否有其他方法可以指定我不想要此元素?
编辑:
如果它改变了什么,我的 ItemTypes
结构嵌套在我的另一个 public 类.
你应该使用: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