C#索引-我可以返回整个类吗?

时间:2019-01-17 01:59:23

标签: c# class indexing

如果我错过了与此明显的东西,我感到很高兴!

我希望让用户对代码进行贴花处理,然后引用类名并从中提取所有数据。

在这里我将向用户显示该信息

   Console.Write("Input a code:");
                Console.Read();


                Console.WriteLine("code: " + HU2H02.HeadCode);
                    var i = 0;
                    Console.WriteLine("Stop No:     Station:      Arr:     Dep:");
                    foreach (Station stop in HU2H02.CallingPattern)
                    {
                    if (i < HU2H02.CallingPattern.Count-1)
                    {   
                        if (i == 0)
                            Console.WriteLine("stop {0}: {1} \t  {3: hh:mm}", i, stop.Name, HU2H02.ArrTimes[i], HU2H02.DepTimes[i]);
                        else
                        Console.WriteLine("stop {0}: {1} \t {2: hh:mm} - {3: hh:mm}", i, stop.Name, HU2H02.ArrTimes[i], HU2H02.DepTimes[i]);
                    }
                    else
                    {
                        Console.WriteLine("stop {0}: {1} \t {2: hh:mm}", i, stop.Name, HU2H02.ArrTimes[i]);
                    }
                        i++;
                    }

这是我的班级代码:(对不起,因为我仍在处理它。

     class Train
    {
        public string HeadCode { get; set; }
        public string Origin { get; set; }
        public string Destination { get; set; }
        public List<Station> callingPattern = new List<Station>();
        public List<DateTime> arrTimes = new List<DateTime>();
        public List<DateTime> depTimes = new List<DateTime>();
        public DateTime DepartOrigin { get; set; }
        public DateTime ArriveDestination { get; set; }
        public string Via1 { get; set; }
        public string Via2 { get; set; }
        public string Via3 { get; set; }
        public string Via4 { get; set; }

        public object this[string Headcode]
        {
            get
            {

                Type myType = typeof(Train);
                PropertyInfo myPropInfo = myType.GetProperty(Headcode);
                return myPropInfo.GetValue(this, null);
            }
            set
            {
                Type myType = typeof(Train);
                PropertyInfo myPropInfo = myType.GetProperty(Headcode);
                myPropInfo.SetValue(this, value, null);

            }
        }

        public Train(List<Station> patterns, string newheadCode, string timetoDepartOrigin, string Origin)
        {
            TimeSpan previousTime = new TimeSpan();
            TimeSpan holder = new TimeSpan();
            TimeSpan calcTimeSpan = new TimeSpan();
            int i = 0;
            foreach (Station pattern in patterns)
            {
                CallingPattern.Add(pattern);

                if (pattern.Name == Origin)
                {

                    depTimes.Add(Convert.ToDateTime(timetoDepartOrigin));
                    ArrTimes.Add(Convert.ToDateTime(timetoDepartOrigin));
                    previousTime = TimeSpan.Parse(timetoDepartOrigin);
                }
                else
                {
                    holder = TimeSpan.Parse(callingPattern[callingPattern.Count - 2].DwellTimePeak);
                    calcTimeSpan = previousTime + holder;
                    ArrTimes.Add(DateTime.Parse(Convert.ToString(calcTimeSpan)));

                    if (callingPattern[callingPattern.Count - 1].DwellTimePeak != null)
                    {
                        holder = TimeSpan.Parse(callingPattern[callingPattern.Count - 1].DwellTimePeak);
                        calcTimeSpan = calcTimeSpan + holder;
                        depTimes.Add(DateTime.Parse(Convert.ToString(calcTimeSpan)));

                        previousTime = depTimes[depTimes.Count - 1].TimeOfDay + TimeSpan.Parse(callingPattern[callingPattern.Count - 1].TimetonextStationUP[patterns[i + 1].Name]);
                    }
                }
                i++;
            }


            HeadCode = newheadCode;
            DepartOrigin = Convert.ToDateTime(timetoDepartOrigin);
        }

        public List<DateTime> ArrTimes { get => arrTimes; set => arrTimes = value; }
        public List<DateTime> DepTimes { get => depTimes; set => depTimes = value; }
        internal List<Station> CallingPattern { get => callingPattern; set => callingPattern = value; }



        }
    }
}

我还需要将整个类声明为Public吗?

我希望将整个Class解析回Main程序或其他Display类,并在以后的程序设计中进一步使用,因为我希望该类成为其他几个类的子类。 >

我对C#有点新鲜,因此如果有任何理由,那么使用appology没有任何意义!谢谢, 克里斯

2 个答案:

答案 0 :(得分:1)

要查找火车,您需要维护static个火车集合。静态变量和函数在类级别(而不是实例级别)上运行。

向您的班级添加类似内容:

private static Dictionary<string, Train> _trains;
private Train GetTrain(string headCode) {
    if (_trains.TryGetValue(headCode, out var train)) {
        return train;
    } else {
        return null;
    }
}
private bool TryGetTrain(string headCode, out Train train) {
    return _trains.TryGetValue(headCode, out train);
}

然后,在构造函数的末尾,添加如下代码:

 _trains.Add(newHeadCode, this);

每次创建新火车时,都会将其添加到该火车词典中。然后,当您要查找火车时,可以执行此操作。

var myTrain = Train.GetTrain("some head code");

答案 1 :(得分:0)

如果您没有将class定义为任何东西,它将保持私有状态。 私有类不能在其他类上访问。 因此我们将其定义为内部或公共。

内部类可以在包含当前项目的任何类上访问。 公共类在其他任何项目上都可以访问。

选择它取决于您的目的。