Как перебрать все объекты из класса на наличие совпадений C#
Допустим у меня есть класс Class1 в котором есть свойства day, month, а также конструктор который принимает и устанавливает значения. Я хочу перебрать все объекты которые были созданы на основе класса Class1 на совпадение свойства day с числом 14 (тобишь мне нужно найти объект в котором свойство day будет равно 14 и дальше с этим объектом работать) Как это можно реализовать?
Мои безуспешные попытки:
Class1 a = new Class1(5, 2);
Class1 b = new Class1(14, 1);
Class1 c = new Class1(23, 9);
Class1 d = new Class1(3, 8);
/*foreach(Class1 i in Class1) {
if (i.day == 14)
{
Console.WriteLine(i.month);
}
}*/
namespace TESTSMTH
{
internal class Class1
{
public short day, month;
public Class1(short day, short month)
{
this.day = day;
this.month = month;
}
}
}
Ответы (2 шт):
Автор решения: aepot
→ Ссылка
Нужно создать коллекцию, массив или список
Class1[] array = [a, b, c, d];
Далее циклом
foreach (Class1 x in array)
{
if (x.day == 14)
{
// ...
}
}
Автор решения: rotabor
→ Ссылка
Чувствую засаду в этом: "перебрать все объекты которые были созданы на основе класса". То есть для начала нужно отследить все эти объекты. Это можно сделать примерно так:
using System;
using System.Linq;
using System.Collections.Generic;
internal class Class1 {
static List<Class1> _list = new List<Class1>();
public short Day, Month;
public Class1(short day, short month) {
Day = day;
Month = month;
_list.Add(this);
}
public static Class1 GetAtDay(short day) {
return _list.FirstOrDefault(f => f.Day == day);
}
}
static class Program {
static void Main() {
Class1 a = new Class1(5, 2);
Class1 b = new Class1(14, 1);
Class1 c = new Class1(23, 9);
Class1 d = new Class1(3, 8);
var o = Class1.GetAtDay(14);
if (o != null) Console.WriteLine("{0} {1}", o.Day.ToString(), o.Month.ToString());
else Console.WriteLine("not found");
}
}
=>
14 1