我在弄清楚如何显示不等于0的对象的统计数据时遇到了问题。基本上我有一个Item类,其中包含50多个变量,如力量,敏捷性,智力等...所有默认等于0.每次单击一个按钮,它都会生成一个对象并给出一些对象的属性非零值(也就是强度现在是3,敏捷现在是2,其他一切都保持为0)。
在我的GUI脚本中,点击生成的项目后,我希望它显示项目的详细信息。我只是希望它显示对象的属性,如果它们不是0.这样我就不会在项目上有50多行属性,说它只是值0。
该项目详细信息的片段如下(注意它编译并运行正常):
public void LootDetailWindow(int id)
{
GUI.Label(new Rect(10, 15, 150, 80), "<color=white><size=15>" + item.Name + "</size></color>");
GUI.Label(new Rect (10, 50, 100, 100), item.Icon);
GUI.Label (new Rect (150, 50, 200, 100), "Level Requirement: " + item.Reqlvl.ToString() + "\nSell Value: " + item.Value);
//here I want to create a label that for every value that is not 0, to display it.
}
那么我将如何查看每个属性并检查它是否为0?提前谢谢。
答案 0 :(得分:2)
我基本同意以上所述,但也考虑.. 你有一个有50多个int字段的类,大多数都是0 blah blah 至少考虑如果你要倾向来枚举其字段,或者可能会定期添加新属性,那么该类可能更适合被字典替换,即
enum attributeTypes
{
strength,
agility,
...
}
并用
替换您的硬编码字段Dictionary<attributeTypes, int>
因为你希望它们默认为0,所以这可能会很好地运作
可能不是当然取决于具体情况,但可能是......
答案 1 :(得分:2)
foreach (PropertyInfo prop in obj.GetType().GetProperties(
BindingFlags.Public | BindingFlags.Instance))
{
if (prop.PropertyType != typeof(int)) continue;
int val = (int)prop.GetValue(obj);
if(val != 0) Console.WriteLine("{0}={1}", prop.Name, val);
}
答案 2 :(得分:1)
您可以make a custom attribute使用该属性修饰您感兴趣的成员,然后use reflection to iterate over the members that have your custom attribute。
反思相对较慢,所以请记住cache the list of conforming members after the first time。
当您有成员列表时,您可以获得他们的名字and actual values for your current object并执行您的演示逻辑。