2015-07-12 2 views
0

У меня есть class, который содержит array второго class так же, как это:членов Выкрутить из массива класса

public class SimpayRecords 
{ 
    public int a; 
    public int b; 
    public int c; 
    public SimpayRecord[] records; 
} 

У меня есть третий class, который содержит SimpayRecords класса. В этом третьем class я хочу пройти через array и удалить ненужные элементы. Что-то вроде этого:

for (int i = 0; i < this.Records.Records.Length; i++) 
{ 
    if (this.Records.Records[i].Date < this.LastTime) 
     //remove TempRecords.Records[i] 
} 

как я могу это сделать?

+0

, если вы хотите удалить, то вам нужно перечислить не массив –

ответ

1

Если вы не хотите использовать список для хранения данных, вы можете использовать метод расширения, как показано в ответ на this question

public static class ArrayExtensions{ 
    public static T[] RemoveAt<T>(this T[] source, int index) 
    { 
     T[] dest = new T[source.Length - 1]; 
     if(index > 0) 
      Array.Copy(source, 0, dest, 0, index); 

     if(index < source.Length - 1) 
      Array.Copy(source, index + 1, dest, index, source.Length - index - 1); 

     return dest; 
    } 
} 

Затем вы можете использовать метод RemoveAt следующим образом:

Foo[] bar = GetFoos(); 
bar = bar.RemoveAt(2); 

Надеется, что это помогает

1

Элементы массива не могут быть удалены. вам нужно вместо List.

Обязательно укажите System.Collections.Generic.

using System.Collections.Generic; 

Ваш класс будет таким.

public class SimpayRecords 
{ 
    public int a; 
    public int b; 
    public int c; 
    public List<SimpayRecord> records; // This is the List. 
} 

Чтобы удалить из списка

for (int i = 0; i < this.Records.Records.Count; i++) 
{ 
    if (this.Records.Records[i].Date < this.LastTime) 
      this.Records.Records.RemoveAt(i--); // Removes the element at this index 
} 

Поскольку список является Diffrent из обычного массива. поэтому вам нужно узнать о List. как их создать и как с ними работать. поэтому взгляните на них.

https://msdn.microsoft.com/en-us/library/6sh2ey19%28v=vs.110%29.aspx http://www.dotnetperls.com/list

1

Если переназначение новый экземпляр массива для this.Records.Records не может быть и речи, вы можете сделать это с помощью простого WHERE условия (реверсивный ваше состояние к >=) в запросе LINQ, как это :

using System.Linq; 

// ... 

this.Records.Records = this.Records.Records.Where(r => r.Date >= this.LastTime).ToArray(); 
+0

это создаст еще один массив. но его проще :) –

+0

@ M.kazem: главное преимущество простоты в том, что проще писать код ошибки. Особенно при выполнении удалений в цикле легко ошибиться, потому что когда удаляются, если вы не настроите индекс на учет для смещения элементов, вы можете случайно пропустить некоторые элементы в списке. Подсказка Подсказка. – sstan

+0

да, я согласен с простотой. Как бы то ни было, я забыл уменьшить счетчик при удалении, (я только что исправил его сейчас). Я думаю, что OP должен сначала изучить List. поэтому он/она станет лучше программистом :) –

Смежные вопросы