在处理许多变量时避免重复性工作

时间:2014-05-16 22:42:03

标签: c# variables

我正在寻找一些建议如何处理类似的示例问题:

string A;
string B;
string C;
string D;
...

void Initialize()
{
    A = someObject.A.ToString();
    B = someObject.B.ToString();
    C = someObject.C.ToString("F");
    D = someObject.D.ToString();
    ...
}

我的类有很多数值变量,我需要将它们的值很容易地传递给这些字符串以获取大量的这些变量。让我们说这是基于RPG统计数据的游戏,很多统计数据,因素等在这里发挥作用。通过复制粘贴来管理这么多变量是一件痛苦的事。

问题:如何简化大量变量的工作 我想知道这个问题的一些解决方案,因为我没有任何经验,我不知道任何人或任何来源寻找解决方案。

我个人想过使用某种结构,dicitonary或数据库。

编辑:准确地说,我已经创建了一个名为Character的类,它有很多属性,如xp,life,gold等。现在我想使用名为Label的类在屏幕上绘制文本来进行GUI,所以我正在编写包含Label对象的GUI类,这些对象会在各种事件上做出相应的反应。例如,我需要在开头为我的标签分配指定的文本,如:

Label life, gold, xp, etc;
life.text = Character.instance.Life.ToString();
gold.text = Character.instance.Gold.ToString();
xp.text = Character.instance.XP.ToString();
...

3 个答案:

答案 0 :(得分:0)

您应该在此问题中包含更多详细信息,以及您希望实现的目标。

根据您提供的信息,我假设您想要动态读取someObject的属性,对它们执行ToString()并将其值赋给某些变量。这是典型的反射分配。您可能需要阅读a chapter covering reflection on MSDN

如果上述假设是正确的,您可以执行以下操作:

        Dictionary<string, string> propertyValues = new Dictionary<string, string>();

        // We access the type information via reflection. What properties your someObject has?
        PropertyInfo[] propertyInfos = someObject.GetType().GetProperties(BindingFlags.Instance | BindingFlags.Public);

        foreach (var propertyInfo in propertyInfos)
        {
            // we get the value of the property, described by propertyInfo, from our someObject 
            object value = propertyInfo.GetValue(someObject, null);
            if (value != null)
            {
                // do your special type handling here and execute ToString()
                if(value.GetType() == typeof(int))
                    propertyValues[propertyInfo.Name] = ((int)value).ToString("F");
                if(value.GetType() == ...)
                else
                    propertyValues[propertyInfo.Name] = value.ToString();
            }
        }

        // so if your someObject had a property A you can access it as follows:
        string A = propertyValues["A"];

        // or you loop the dictionary and do some suff with it (which makes much more sense):
        foreach(var keyValuePair in propertyValues)
            Console.WriteLine("Property {0} = {1}", keyValuePair.Key, keyValuePair.Value);

答案 1 :(得分:0)

如果没有看到您的确切设计/要求,我们就有点难以说,但处理许多情况的一种简单方法是存储对象本身,而不是复制其属性或字段。

例如,在您的版本中,您可能有:

private int A;
private string B;
private double C;

public void Initialize(DataObject data)
{
    A = data.A;
    B = data.B;
    C = data.C;
}

public void DoSomething() //Just an arbitrary method using the data
{
    return B + " " + A.ToString();
}

然而,你可以更简单地做:

private DataObject _data;

public void Initialize(DataObject data)
{
    _data = data;
}

public void DoSomething() //Just an arbitrary method using the data
{
    return _data.B + " " + _data.A.ToString();
}

答案 2 :(得分:0)

取决于值如何进入某些对象&#39;,拥有更少代码的第一步是将属性定义为String,在get accessor方法中执行从int到String的转换。即使这只是将ToString()移动到另一个位置,每次获取值时它都会减少代码。