似乎无法改变字符串[]的长度

时间:2014-03-05 15:09:53

标签: c# arrays

我在C#中有一个数组:

string[] foo = new string[11];

foo数组的长度为10,我只将它改为11,因为我需要一个额外的值。我唯一的问题是:我似乎无法改变数组的长度。如果我将它改为11,就像上面的例子一样,设置一个断点并调试,在编译器通过这一行后,它的长度仍为10。

现在,当我在编译器通过此行后添加一个手表foo = new string[11]时,所有值都将被删除,长度将更改为11.基本上我不知道发生了什么,特别是为什么添加一个手表对变量的运行时值的影响。

有人知道这里发生了什么吗?

    public string[] getValues()
    {
        //Why does this only have 10 dimensions after initialization?????
        string[] values = new string[11];

        string[] temp = ddlProjectnumber.Text.Split('-'); //<----- here I set break point.
        values[0] = temp[0].Trim();
        values[1] = tbTask.Text;
        values[2] = ddlSubstitute.Text;
        values[3] = ddlCategory.Text;
        values[4] = ddlSubcategory.Text;
        values[5] = cbFinished.Checked.ToString();

        if (propertychanged)
        {
            values[6] = DateTime.Now.ToString();
        }

        values[7] = cbJourney.Checked.ToString();

        return values;
    }

2 个答案:

答案 0 :(得分:4)

如果您创建一个类来保存您的值,您的代码将更容易维护:

public class MyClass
{
    public string ProjectNumber { get; set; }
    public string Task { get; set; }
    public string Substitute { get; set; }
    public string Category { get; set; }
    public string Subcategory { get; set; }
    public bool Finished { get; set; }
    public DateTime? PropChangedDate { get; set; }
    public bool Journey { get; set; }
}

然后调整您的方法以只填充该类的实例并返回该代码:

public MyClass GetValues()
{
    var myClass = new MyClass
    {
        ProjectNumber = ddlProjectnumber.Text.Split('-').First().Trim(),
        Task = tbTask.Text,
        Substitute = ddlSubstitute.Text,
        Category = ddlCategory.Text,
        Subcategory = ddlSubcategory.Text,
        Finished = cbFinished.Checked,
        Journey = cbJourney.Checked
    };

    if (propertychanged)
        myClass.PropChangedDate = DateTime.Now;

    return myClass;
}

现在您不必猜测在数组的每个元素中存储了哪些值。

答案 1 :(得分:0)

好吧我玩了一下,在将配置从调试更改为发布再到再次调试之后,它显然已经修复了。我想这真的是旧代码,但由于某种原因,在我清理并重建我的解决方案后它没有正确重新编译。无论如何它现在有效:)