【问题标题】:How to index a string array如何索引字符串数组
【发布时间】:2009-07-21 14:32:59
【问题描述】:

我在 C# 3.5 中有一个字符串数组:

string [] times = new[] {“08:00 am” , “10:00 am”, “120”} ; 

我想创建时间索引:StartTimeEndTimeElapsedTime,这样当我编码时:

StartTime= “09:00 am” ; 
EndTime= “11:00 am” ; 

然后将 times[0] 设置为 “09:00 am” 等。

我可以创建 3 种方法:

private void StartTime(string time)
{    times[0] = time;  }
private void EndTime(string time)
{    times[1] = time;  }
private void ElapsedTime(string time)
{    times[2] = time;   }

和代码

StartTime("09:00");  

但是有没有更简单的方法呢?

【问题讨论】:

  • 当你真的应该在具有私有成员的类中拥有它时,为什么还要使用数组?

标签: c#


【解决方案1】:

您真正应该做的是创建一个新类来执行此操作。制作两次属性。

经过的时间是开始时间和结束时间的函数。

class Time 
{
    public DateTime StartTime{ get; set; }
    public DateTime EndTime{ get; set; }

    public String[] ToStringArray() 
    {
        String[] ret = new String[3];
        ret[0] = StartTime.ToString();
        ret[1] = EndTime.ToString();
        ret[2] = ElapsedTime().ToString();
        return ret;
    }

    public TimeSpan ElapsedTime() 
    {
        return EndTime.subtract(StartTime);
    }
}

【讨论】:

  • +1 向他展示一个公共属性,该属性返回字符串数组中的所有 3,然后这将是完美的解决方案 :)
  • @Matt:我会说这是赚到了(我写这篇文章的时候是 95)。
  • 这是一堂很好的代码设计课。使您的代码模型成为您想要做的事情。
  • 我在 ToStringArray() 中添加了一个 return 语句,我认为这在 C#3.0 中仍然是必需的,但如果我错了请删除
  • @Patrick 我不希望这种方法真正起作用。但是感谢您的修复! :P
【解决方案2】:

我不知道它更简单,但我建议从代码中取出硬索引引用并用常量替换它们,以便在数组中元素的顺序将来发生变化时更容易维护:

private const int START_TIME = 0;
private const int END_TIME = 1;
private const int ELAPSED_TIME = 2;

那么你也会得到更易读的代码:

times[END_TIME] = time;

除非你想更加面向对象,在这种情况下你应该听从 jjnguy 的建议。

【讨论】:

    【解决方案3】:

    要添加到 jjnguy 的答案,您应该真正拥有一个包含 3 个属性的类,然后如果您需要一个数组,您可以拥有一个只有一个 getter 并在字符串数组中返回 3 个不同时间的公共属性。

    【讨论】:

    • 我在示例中添加了该功能。
    【解决方案4】:

    使用字典。见here

    【讨论】:

      【解决方案5】:

      扩展方法怎么样?

      public static class Extensions
      {
         public static void StartTime(this string[] array, string value)
         {
            array[0] = value;
         }
      }
      

      【讨论】:

        【解决方案6】:

        您可以使用字典来做到这一点。

        例如

        Dictionary<string, string> times = new Dictionary<string, string>();
        times.Add("StartTime","09:00am");
        times.Add("EndTime","11:00am");
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-11-25
          • 1970-01-01
          • 2013-11-05
          • 2014-03-02
          • 1970-01-01
          • 2015-03-03
          • 2022-09-22
          • 2021-08-25
          相关资源
          最近更新 更多