我有一个组合框,选中后会在3个文本框中显示文本。
组合框项目是50个状态,文本框显示有关州法规的信息。现在我正在使用多维数组来保存每个状态的数据(数组中的每个项目都包含状态,第1项,第2项,第3项)。
我的问题是:创建一个包含3个项目的状态数据类型会更好还是更紧凑?实际上,这是否是一种有效的方法?我不喜欢这个阵列,只是我现在知道该怎么做。
在大多数情况下,重复使用3种数据类型。
例如,其中一个是州使用的时区,因此只有6种可能的选项。
我没有在我面前的代码,或者我会发布它,只是我正在考虑的事情。
答案 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或需要将选定的状态信息传递给另一个方法,则会出现问题。