另一个列表(T)中的值列表(T),第一个值列表被删除

时间:2018-07-30 21:10:55

标签: c# list

我有一个值列表,在此列表中还有另一个列表,我将一系列值及其日期放在UnixTime中。

列表代码。

public class ValorES
{
    public int Fecha { get; set; }
    public decimal valor { get; set; }
}
public class DatosEntSal
{
    public string PuntoMed { get; set; }
    public int NumId { get; set; }
    public string Nombre { get; set; }
    public string Etiqueta { get; set; }
    public string Unidad { get; set; }
    public string UmbralInferior { get; set; }
    public string BandaMuertaInferior { get; set; }
    public string UmbralSuperior { get; set; }
    public string BandaMuertaSuperior { get; set; }
    public string EscalaEjeMin { get; set; }
    public string EscalaEjeMax { get; set; }
    public bool AutoEscalaEje { get; set; }
    public int Pos_X { get; set; }
    public int Pos_Y { get; set; }
    public int Alto { get; set; }
    public int Ancho { get; set; }
    public string MimicoId { get; set; }
    public List<ValorES> ValoresRegistrados { get; set; }
}

代码如下:

public List<DatosEntSal> ObtenerEntradasSalidas()
{
    int _contrato = 14;
    List<DatosEntSal> _ValoresEntSal = new List<DatosEntSal>();
    List<EntradaSalida> EntradasSalidas = new List<EntradaSalida>();
    List<Vista> EntSalVista = new List<Vista>();

    List<Registro> data = new List<Registro>();

    MonitoreoEntities _context = new MonitoreoEntities();
    EntSalVista = _context.Vistas.Where(yy => yy.ID_EntSal != null).ToList();

    foreach (var Valor_EntSal in EntSalVista)
    {
        string fecha;
        fecha = Fecha_Ultimo_Registros(EntSalID_PtoMedId(Valor_EntSal.ID_EntSal), Valor_EntSal.ID_EntSal);
        DateTime _FechaFinal = DateTime.Parse(fecha);
        DateTime _FechaInicial = _FechaFinal;
        List<ValorES> datosReg = new List<ValorES>();
        int _PtoMedId=EntSalID_PtoMedId(Valor_EntSal.ID_EntSal);
        string _NombrePtoMed=PuntoMedID_NombrePtoMed(_PtoMedId);                   
        EntradasSalidas = _context.EntradaSalidas.Where(xx => xx.PuntoDeMedicionId == _PtoMedId
            && xx.Graficar == 1 && xx.Id == Valor_EntSal.ID_EntSal).ToList();                    
        if (EntradasSalidas.Count > 0)
        {
            data = _context.Registroes.Where(a => a.EntradaSalidaId == Valor_EntSal.ID_EntSal
            && a.FechaHoraRegistro <= _FechaFinal
            && a.FechaHoraRegistro >= _FechaInicial).OrderBy(i => i.FechaHoraRegistro).ToList();

            foreach (var item in data)
            {
                datosReg.Add(new ValorES()
                {
                    Fecha = item.FechaHoraCreacion.Value,
                    valor = item.Valor
                });
            };

            _ValoresEntSal.Add(new DatosEntSal()
            {
                PuntoMed = _NombrePtoMed,
                NumId =EntradasSalidas[0].Id,// _ESVista.Id,
                Nombre =EntradasSalidas[0].Nombre,// _ESVista.Nombre,
                Etiqueta =EntradasSalidas[0].Etiqueta,// _ESVista.Etiqueta,
                Unidad =EntradasSalidas[0].Unidad,// _ESVista.Unidad,
                UmbralInferior =EntradasSalidas[0].UmbralInferior.ToString(),// _ESVista.UmbralInferior.ToString(),
                BandaMuertaInferior = EntradasSalidas[0].BandaMuertaInferior.ToString(),
                UmbralSuperior = EntradasSalidas[0].UmbralSuperior.ToString(),
                BandaMuertaSuperior = EntradasSalidas[0].BandaMuertaSuperior.ToString(),
                EscalaEjeMin = EntradasSalidas[0].EscalaEjeMin.ToString(),
                EscalaEjeMax = EntradasSalidas[0].EscalaEjeMax.ToString(),
                AutoEscalaEje = EntradasSalidas[0].AutoEscalaEje.Value,
                Pos_X = Valor_EntSal.Pos_X,
                Pos_Y = Valor_EntSal.Pos_Y,
                Alto = Valor_EntSal.Alto,
                Ancho = Valor_EntSal.Ancho,
                MimicoId = Valor_EntSal.MimicoCodigo,
                ValoresRegistrados = datosReg,
            });
        };

        datosReg.Clear(); //limpio la lista
    }
    return _ValoresEntSal;
}

问题:在循环中逐步运行程序时,我从“ ValueES”列表中获取了所有值。

然后将这些值插入“ DatosEntSal”列表中,在“如果”的末尾以及内部列表“ RegisteredValues”中,它具有“ ValorES”的所有元素,但是当退出循环并继续时使用foreach接受另一个元素,它将删除内部列表“已注册值”中的所有元素,而只留下一个。

我逐步运行程序,经过5次互动,我有:

  
      
  • _ValoresEntSal Count = 5 System.Collections.Generic.List
  •   
  • [0] {SystemaControl.WebServices.ValoresVista1.DatosEntSal} SystemaControl.WebServices.ValoresVista1.DatosEntSal
  •   
  • [1] {SystemaControl.WebServices.ValoresVista1.DatosEntSal} SystemaControl.WebServices.ValoresVista1.DatosEntSal
  •   
  • [2] {SystemaControl.WebServices.ValoresVista1.DatosEntSal} SystemaControl.WebServices.ValoresVista1.DatosEntSal
  •   
  • [3] {SystemaControl.WebServices.ValoresVista1.DatosEntSal} SystemaControl.WebServices.ValoresVista1.DatosEntSal
  •   
  • [4] {SystemaControl.WebServices.ValoresVista1.DatosEntSal} SystemaControl.WebServices.ValoresVista1.DatosEntSal
  •   

在迭代5中,值是:

[4] {SystemaControl.WebServices.ValoresVista1.DatosEntSal}  SystemaControl.WebServices.ValoresVista1.DatosEntSal
Alto    3   int
Ancho   6   int
AutoEscalaEje   false   bool
BandaMuertaInferior "11.00" string
BandaMuertaSuperior "22.00" string
EscalaEjeMax    "35.00" string
EscalaEjeMin    "0.00"  string
Etiqueta    "A3"    string
MimicoId    "gl01"  string
Nombre  "Cava A2 Temp"  string
NumId   277 int
Pos_X   0   int
Pos_Y   4   int
PuntoMed    "CavasLujan"    string
UmbralInferior  "12.00" string
UmbralSuperior  "23.00" string
Unidad  "°C"    string
ValoresRegistrados  Count = 97  System.Collections.Generic.List<SystemaControl.WebServices.ValoresVista1.ValorES>

可以看到对象“ ValoresRegistrados”具有97个元素,但是当离开if循环时,它仍然保留0个元素。

[4] {SystemaControl.WebServices.ValoresVista1.DatosEntSal}  SystemaControl.WebServices.ValoresVista1.DatosEntSal
Alto    3   int
Ancho   6   int
AutoEscalaEje   false   bool
BandaMuertaInferior "11.00" string
BandaMuertaSuperior "22.00" string
EscalaEjeMax    "35.00" string
EscalaEjeMin    "0.00"  string
Etiqueta    "A3"    string
MimicoId    "gl01"  string
Nombre  "Cava A2 Temp"  string
NumId   277 int
Pos_X   0   int
Pos_Y   4   int
PuntoMed    "CavasLujan"    string
UmbralInferior  "12.00" string
UmbralSuperior  "23.00" string
Unidad  "°C"    string
ValoresRegistrados  Count = 0   System.Collections.Generic.List<SystemaControl.WebServices.ValoresVista1.ValorES>

2 个答案:

答案 0 :(得分:1)

foreach迭代结束时,您具有:

datosReg.Clear();

这将清除您刚刚分配给新DatosEntSal实例的列表。您无需调用Clear(),因为变量是在foreach中声明的,只需删除它即可。

答案 1 :(得分:1)

您将列表作为参考,因此清除变量datosReg也会清除ValoresRegistrados。如果您希望它像这样维护其值,请从中创建一个新列表:

ValoresRegistrados = datosReg.ToList()