如果一个类有一个自定义类的公共列表,我如何知道我何时使用列表项#(记录号)

本文关键字:列表 何知道 何时使 记录 一个 有一个 自定义 如果 | 更新日期: 2023-09-27 18:15:39

我正在尝试创建一个进度条类,如下所示。如果子节点的剩余时间大于父节点的剩余时间,则父节点的剩余时间应该等于子节点的剩余时间。

在下面的CalcETA()方法中,我很难访问孩子的属性。我想如果我知道列表项#,我就可以以某种方式访问ProgressBarList[myIndex+1]的值…

public class ProgressBars
//NOTE: Not working yet
// used to keep track of multiple progress bars and the time remaining.
// recommended to set as default: Min = 1, Max = 100, Step = 1, Value = 1 in progress bar property control.
{
  public List<ProgressBarItem> ProgressBarList;
  public bool Started { get; set; }       // set to true if you want to keep track of when to update bars on form.
  public string Status { get; set; }      // general text
  public class ProgressBarItem
  {
    public bool HasChild { get; set; }     // if HasChild = True then parent TimeRemaining must not be less than childs.
    public int Maximum { get; set; }
    public int Value { get; set; }
    public string Text { get; set; }
    public DateTime StartTime { get; set; }
    public TimeSpan TimeRemaining { get { return CalcETA(HasChild, StartTime, Value, Maximum); } }
    public TimeSpan ElapsedTime { get { return DateTime.Now - StartTime; } }
  }
  private static TimeSpan CalcETA(bool HasChild, DateTime StartTime, int counter, int counterGoal)
  {  // Calculate the time remaining for the process
    if (HasChild)  
    {
      //TODO: How do I get the child's StartTime?
      TimeSpan timeElapsed = DateTime.Now - StartTime;
      return GetETAFromTimeElapsed(timeElapsed, counter, counterGoal);
    }
    else
    {
      TimeSpan timeElapsed = DateTime.Now - StartTime;
      return GetETAFromTimeElapsed(timeElapsed, counter, counterGoal);
    }
  }

  private static TimeSpan GetETAFromTimeElapsed(TimeSpan ts, int Counter, int CounterMax)
  {
    if (Counter != 0)  // do not divide by zero
    {
      double minLeft = (ts.TotalMinutes / Counter) * (CounterMax - Counter);
      return TimeSpan.FromMinutes(minLeft);
    }
    else
      return default(TimeSpan);
  }
更新1:

问题应该是:如果一个类包含一个自定义类的List,当我在List Item get属性中工作时,我如何获得类List item# ?

听起来像我需要查找嵌套类,感谢术语。也许这样更清楚:问题:子进度条的剩余时间(ETA)为5分钟。父进度条显示预计到达时间为2分钟,这是误导。因此,也将父进度条设置为5分钟。

  1. 每个进度条都是列表中的一个类。即List<MyProgressBar>
  2. 每个进度条都需要计算ETA。
  3. 当计算任何进度条的预计到达时间时,检查它是否有子进度条以及当前的预计到达时间如果一个类有一个自定义类的公共列表,我如何知道我何时使用列表项#(记录号)

我对你的代码有点困惑

在回答你的标题问题虽然,找到列表中的ProgressBarItem的索引,你可以使用IndexOf()方法,这取决于CalcETA代码最终运行的地方,你要么要传递它的列表,在这种情况下,你会使用IndexOf(this)或你传递它的listtitem在这种情况下,你会使用IndexOf(listtitem)

我希望这对你最初的问题有一些帮助,代码,因为它的存在需要重大的修改。

添加一个属性ProgressBarItem类型(Parent),用于存储每个ProgressBarItem的父元素,然后查找节点的子元素:

var Childs=ProgressBarList.Where(p=>p.Parent==Node);
相关文章: