1

Тема: Порівняти значення по посиланню

Підкажіть будь ласка, у мене в метод передається делегат

Predicate<Product> predicate
public static int IndexOf(Product[] products, Predicate<Product> predicate)
        {
                    var product = products[i];
                    if (predicate(product)){ //завжди false
                    //do something
                    }

а в тесті в цей делегат передається метод Equals

public void Test()
        {
            var products = new Product[]
            {
                new Product("Product 3", 30.0d),
            };
            var productToFind = new Product("Product 3", 30.0d);
 
            int index = Utilities.IndexOf(products, product => product.Equals(productToFind));

звісно ці змінні не дорівнюють одна одній, адже, не дивлячись на те, що значення у них однакові, адреси - різні, але, можливо ви підкажете, як можна змінити метод  IndexOf, аби цей тест виконувався і я отримувала значення true, коли значення product буде дорівнювати значенню productToFind

2

Re: Порівняти значення по посиланню

Equals має перевіряти не адреси, а по рівність значень. Адреси перевіряє звичайне порівняння ==. Але Equals має бути перевантажено в класі Product, інакше порівняння може бути некоректним.

Подякували: burlaka.dina, leofun012

3

Re: Порівняти значення по посиланню

koala написав:

Equals має перевіряти не адреси, а по рівність значень. Адреси перевіряє звичайне порівняння ==. Але Equals має бути перевантажено в класі Product, інакше порівняння може бути некоректним.

зараз там немає перевантаження, можливо ви підкажете, як правильно це зробити?

4

Re: Порівняти значення по посиланню

Десь так

Подякували: burlaka.dina1

5

Re: Порівняти значення по посиланню

koala написав:

Десь так

супер, дуже дякую, все працює)))

6

Re: Порівняти значення по посиланню

Поділіться робочим кодом з майбутніми поколіннями, будь ласка.

7

Re: Порівняти значення по посиланню

koala написав:

Поділіться робочим кодом з майбутніми поколіннями, будь ласка.

я реалізувала таким чином))

public override bool Equals(object obj)
{
    Product product = obj as Product;

    if (obj == null || obj as Product == null)
    {
        return false;
    }
    return product.Name == this.Name && product.Price == this.Price;
}
Подякували: koala1