【问题标题】:Custom data type (Structures) vs arrays自定义数据类型(结构)与数组
【发布时间】:2011-12-05 23:35:24
【问题描述】:

我有一个组合框,当被选中时,它会在 3 个文本框中显示文本。

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

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

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

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

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

【问题讨论】:

  • 在这种情况下自定义数据类型绝对是要走的路。

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


【解决方案1】:

关于多维数组,您必须问自己的问题是,“其他程序员可以查看它并理解发生了什么吗?”

是不是更紧凑?也许也许不是。这完全取决于代码。实际上,除非您处理的内存要求非常低,否则这可能无关紧要。这样想,假设每个时区占用四个字节(整数大小)。每个时区都有条目意味着您使用了 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..
}

【讨论】:

  • 我宁愿这样做,但同时我不想初始化 50 个不同的实例。我认为我必须这样做是对的,还是你知道如何不这样做的好指南?我(显然)对自定义数据类型和如何实现相当陌生,但我肯定想学习它。
  • 创建 50 个结构或对象的实例不应该比初始化包​​含相同数据的 50 个数组行更多。
  • @SeanU 我同意。你已经在做初始化工作了,不妨得到一个你可以轻松使用的格式。
【解决方案2】:

选择自定义类型,它更简洁(您可以通过名称访问属性),不易出错(名称比索引更难混淆)并且可维护(属性未“排序”,没有不需要的 @987654322 @ 需要适合属性计数,并且如果您想要不同类型的属性,则确实具有类型安全性)。

【讨论】:

  • 查看上面对 Kevin 的回复 :)
  • @KevenM:如果您不熟悉自定义类型,我建议您阅读this guide。如果您一直在使用循环初始化数组,您也可以创建对象并在循环中设置它们的字段/属性。
【解决方案3】:

源代码将有助于我了解您到底在做什么。

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

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

【讨论】:

  • 我知道这不能替代代码,但基本上我已经初始化了数组,然后使用 foreach 块遍历它以将内容发送到各个文本框。
  • 首先尝试使用 for(int i=0;i
猜你喜欢
  • 2019-09-09
  • 2021-04-21
  • 2021-05-08
  • 1970-01-01
  • 2022-11-24
  • 2021-06-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多