【问题标题】:Can I create a list that holds both a long and a string in C#我可以在 C# 中创建一个同时包含长字符串和字符串的列表吗
【发布时间】:2012-09-13 06:53:20
【问题描述】:

我有以下课程:

public abstract class BaseGridViewModel
{
    protected BaseGridViewModel()
    {
        Timer = new List<long>();
    }
    public List<long> Timer { get; set; }
}

要更新我的计时器:

vm.Timer.Add(sw.ElapsedMilliseconds);

我对列表不太熟悉。我是否有可能有一个清单 包含一个长字符串和一个字符串,以便我可以执行以下操作:

vm.Timer.Add(sw.ElapsedMilliseconds, "After event 1");
vm.Timer.Add(sw.ElapsedMilliseconds, "After event 2");

【问题讨论】:

  • 一种方法是改用List&lt;Tuple&lt;long, string&gt;&gt;
  • @TimSchmelter - 元组不是不可变的吗?如果他们想要/需要,这将阻止 OP 更新值。
  • @Tim 如果没有大量上下文,我认为这是不可变类型的理想场所。
  • 一旦设置了这些值,我就不需要更新它们了。你能不能给我一个我如何使用它的例子。谢谢

标签: c#


【解决方案1】:

创建一个类来保存这两个值,并将它们存储在列表中。

public sealed class TimeEvent
{
  public long Elapsed {get; private set;}
  public string Description { get; private set;}
  public TimeEvent(long elapsedTime, string descriptionOfEvent)
  {
    this.Elapsed = elapsedTime;
    this.Description = descriptionOfEvent;
  }
}

public IList<TimeEvent> TimerEvents {get; set;}

vm.Timer.Add(new TimeEvent(sw.ElapsedMillisends, "After event 1"));

【讨论】:

  • 您如何看待 cmets 中建议的使用元组的想法?
  • @Gemma 元组在某些情况下很好,但通常我更喜欢具有命名有意义属性的类,而不是 Item1、Item2 等。
  • 如果你想真的疯狂,你甚至可以使用自定义的Add 方法和一些便利的方法/属性来实现一个集合类(例如,Timeline)比如StartTimeEndTimeTotalElapsed
  • @DanTao 添加一些自动数据库和 xml 序列化的东西,你就有了我写的收集数据库性能指标的工具:)
【解决方案2】:

您可以创建一个class,然后创建一个Listclass

public class TimerData
{
    public long time;
    public string description;

    public TimerData(long t, string d)
    {
        this.time = t;
        this.description = d;
    }
} 


List<EventData> list = new List<EventData>();
list.Add(new TimerData(50, "Description"));

你可以用你的类做更高级的事情,但是这个方法很简单。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-10-15
    • 2018-01-18
    • 2011-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多