显示对象的变量值不等于0

时间:2014-01-23 00:34:40

标签: c# unity3d

我在弄清楚如何显示不等于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?提前谢谢。

3 个答案:

答案 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并执行您的演示逻辑。