У меня есть объект 'ForValidation', у которого в качестве свойства есть список int, и объект 'Validator', у которого есть метод Verify (IEnumerable ForValidation). Метод Verify добавляет числа в свойство списка ForValidation.
В основной функции у меня есть IEnumerable из Validator и IEnumerable из ForValidation
при каждом выходе из Verify (IEnumerable), список внутри ForValidation возвращается в 0count.
Насколько я понимаю, объекты являются ссылочными типами в C #, и модификации из любого места должны отражаться в одном и том же объекте.
Я попытался запустить отладчик Visual Studio построчно, чтобы проверить этот список внутри 'ForValidation 'фактически добавляется в данные и затем исчезает после метода Verify.
public class ForValidation
{
private readonly object @lock = new object();
private readonly List<int> ExistenceChecks = new List<int>();
public IEnumerable<int> ExistsPlaces => ExistenceChecks;
public string CheckProperty { get; }
public ForValidation(string checkProperty )
{
CheckProperty = checkProperty ;
}
public void ConfirmExistence(int place)
{
lock (@lock)
{
ExistenceChecks.Add(place);
}
}
}
public class Validator
{
public int ValidatorNumber { get; }
private readonly Datasource somedatasource;
public Validator(int number, Datasource someds)
{
ValidatorNumber = number;
somedatasource = someds;
}
public void Verify(IEnumerable<ForValidation> forValidations)
{
ForValidation[] copy = forValidations.ToArray();
IEnumerable<string> checkProperties = from member in copy
select member.CheckProperty;
IEnumerable<CompareAgainst> existingMembers
= somedatasource.Filter(new CheckPropertiesFilter(checkProperties)).Execute();
foreach (ForValidation forValidation in copy)
{
if (existingMembers.FirstOrDefault(m => m.CheckProperty == forValidation.CheckProperty) != null)
{
forValidation.ConfirmExistence(ValidatorNumber);
}
}
int x = copy.Length;
//each forValidation.ExistsPlaces has items until this code block
}
}
main
{
private readonly IEnumerable<ForValidation> forValidations {...}
private readonly IEnumerable<Validator> validators {...}
foreach (Validator validator in validators)
{
validator.Verify(forValidations);
// each forValidation.ExistsPlaces count is 0 again in this block
}
}
IExpect Каждый элемент ForValidation внутри forValidations будет иметь запомненные элементы в своем свойстве IEnumerable ExistsPlaces после каждого метода Verifyвалидаторы, но он становится равным 0 после каждой итерации метода Verify в цикле foreach