Mercurial > pub > ImplabNet
comparison Implab/CustomEqualityComparer.cs @ 55:c0bf853aa04f
Added initial JSON support
+JSONParser
+JSONWriter
author | cin |
---|---|
date | Sun, 15 Jun 2014 19:39:11 +0400 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
51:2c332a9c64c0 | 55:c0bf853aa04f |
---|---|
1 using Implab; | |
2 using System; | |
3 using System.Collections.Generic; | |
4 using System.Linq; | |
5 using System.Text; | |
6 using System.Threading.Tasks; | |
7 | |
8 namespace Implab { | |
9 /// <summary> | |
10 /// Обертка для создания <c>IEqualityComparer</c> с использованием делегатов или лямда-выражений. | |
11 /// </summary> | |
12 /// <typeparam name="T">Тип сравниваемых значений</typeparam> | |
13 public class CustomEqualityComparer<T> : IEqualityComparer<T> { | |
14 Func<T, T, bool> m_equals; | |
15 Func<T, int> m_hash; | |
16 | |
17 /// <summary> | |
18 /// Создает новый объект с указанными функциями сравнения на раветво и получения хеш-кода. | |
19 /// </summary> | |
20 /// <param name="equality">Функция проверки на равенство</param> | |
21 /// <param name="hash">Функция получения хешкода</param> | |
22 public CustomEqualityComparer(Func<T, T, bool> equality, Func<T, int> hash) { | |
23 Safe.ArgumentNotNull(equality, "equality"); | |
24 Safe.ArgumentNotNull(hash, "hash"); | |
25 m_hash = hash; | |
26 m_equals = equality; | |
27 } | |
28 | |
29 /// <summary> | |
30 /// Сравнивает два знаечния на ревенство. | |
31 /// </summary> | |
32 /// <param name="x"></param> | |
33 /// <param name="y"></param> | |
34 /// <returns>Результат сравнения на равенство</returns> | |
35 public bool Equals(T x, T y) { | |
36 return m_equals(x,y); | |
37 } | |
38 | |
39 /// <summary> | |
40 /// Получает хеш-код для указанного значения. | |
41 /// </summary> | |
42 /// <param name="obj"></param> | |
43 /// <remarks>Равные знаечния *должны* иметь одинаковый хеш-код.</remarks> | |
44 /// <returns>Хеш-код</returns> | |
45 public int GetHashCode(T obj) { | |
46 return m_hash(obj); | |
47 } | |
48 } | |
49 } |