自定义数据类型(结构)与数组

时间:2011-12-05 23:35:24

标签: c# wpf arrays struct custom-data-type

我有一个组合框,选中后会在3个文本框中显示文本。

组合框项目是50个状态,文本框显示有关州法规的信息。现在我正在使用多维数组来保存每个状态的数据(数组中的每个项目都包含状态,第1项,第2项,第3项)。

我的问题是:创建一个包含3个项目的状态数据类型会更好还是更紧凑?实际上,这是否是一种有效的方法?我不喜欢这个阵列,只是我现在知道该怎么做。

在大多数情况下,重复使用3种数据类型。

例如,其中一个是州使用的时区,因此只有6种可能的选项。

我没有在我面前的代码,或者我会发布它,只是我正在考虑的事情。

3 个答案:

答案 0 :(得分:4)

你必须问自己一个多维数组的问题是,“另一个程序员可以查看它并了解发生了什么吗?”

更紧凑吗?也许可能不会。这一切都取决于代码。事实上,除非你处理非常低的内存要求,否则它可能并不重要。可以这样想,假设每个时区占用四个字节(整数的大小)。每个时区都有条目意味着你已经使用了50 x 4 = 200字节。无论如何都不用担心。

我会改变它,因为在6个月内你可能很难理解它的作用。在几乎所有情况下,可读性和可维护性都是最重要的。

所以也许一个例子是:

class State
{
    public State (string stateId, int timeZoneOffset)
    {
       StateId = stateId;
       TimeZoneOffSet = timeZoneOffset;
    }

    public String StateId {get;set;}
    public int TimeZoneOffest {get;set;}
}

public class StatesAndTerritories
{
    List<State> _states = new List<State>
    public StatesAndTerritories ()
    {
      //_state.Add state information here

      _state.Add(new State("AZ", -6); ......

    }

    public IEnumerable<State> GetStates (){
     return _state;
    }

   public IEnumerable<State> GetStatesInZimeZone(int timezone)
    {}

    etc..
}

答案 1 :(得分:2)

转到自定义类型,它更干净(您可以按名称访问属性),更不容易出错(比名称更容易混淆名称)和可维护(属性不是“已排序”,没有不需要的{{ 1}}需要适合属性计数,如果你想要不同类型的属性,你确实有类型安全。)

答案 2 :(得分:1)

源代码有助于我了解您的具体操作。

如果纯粹的表现是一个目标,那么我会建议一个单维数组,其中一个结构包含每个状态的信息。

这将加快对元素的访问,并使跟踪哪个变量具有哪个值(命名变量而不是数组索引)更容易。重要的是要记住struct是一个值类型,所以如果你将它传递给另一个函数,那么该函数将获得结构的副本而不是原始的。如果直接使用数组,这不是问题,但如果使用List或需要将选定的状态信息传递给另一个方法,则会出现问题。