Confirm the uniqueness of the fields in the list

I made a list in C # and I want to do a test to see if all the values ​​of the Id fields are unique.

public static List<RestaurantReview> _reviews = new List<RestaurantReview>
{
    new RestaurantReview
    {
        Id = 1,
        Name = "McDonalds",
    },
    new RestaurantReview
    {
        Id = 2,
        Name = "Burger King",
    },
}

Since I did some debugging, I realized that it works through a list, but I am not getting the correct test value. Can someone explain what I'm doing wrong here?

[TestMethod()]
public void CheckReviewIds()
{
    var FirstReview = ReviewsController._reviews.First();
    bool AllUniqueIds = ReviewsController._reviews.All(s => s.Id == FirstReview.Id);

    Assert.IsFalse(AllUniqueIds);

}

Thanks in advance.

+4
source share
3 answers

You verify that all values ​​are not equal to the first. This can happen if the values, for example, [1, 2, 3, 3], none are equal to the first, but to the most, but 3 == 3.

GroupBy , , . , ( , , 100000 , ):

 ReviewsController._reviews.GroupBy(x => x.Id).Count() == ReviewsController._reviews.Count; 

, , API, . , , . , -, .

+5

, ( , ), HashSet :

bool IsAllUnique<T>(IEnumerable<T> values)
{
    HashSet<T> hash_set = new HashSet<T>();

    return values.All(x => hash_set.Add(x));
}

:

bool unique = IsAllUnique(ReviewsController._reviews.Select(x => x.Id));

, HashSet.Add false, , , .

, , , , .

+6

, - :

var actual = ReviewsController._reviews.Select(r => r.Id).Distinct().Count();

var expected = ReviewsController._reviews.Count();
Assert.Equal(expected, actual);
+2

Source: https://habr.com/ru/post/1610183/


All Articles