GillSoft.XmlComparer.KeyValueElementInfo.KeyMatchCount C# (CSharp) Method

KeyMatchCount() public static method

public static KeyMatchCount ( KeyValueElementInfo kv, string elementName, IEnumerable names ) : int
kv KeyValueElementInfo
elementName string
names IEnumerable
return int
        public static int KeyMatchCount(KeyValueElementInfo kv, string elementName, IEnumerable<string> names)
        {
            var res = 0;
            if (kv.ElementName == "*" || kv.ElementName == elementName)
            {
                res = names == null || names.Count() == 0 ? -1 : names.Where(a => kv.KeyNames.Any(b => b == a)).Count();
                if (!string.IsNullOrWhiteSpace(kv.ValueName))
                {
                    if (names != null && names.Any(a => a == kv.ValueName))
                        res++;
                }
            }
            return res;
        }

Usage Example

        internal static KeyValueElementInfo GetBestKeyValueInfo(this XElement element)
        {
            var res = default(KeyValueElementInfo);

            if (element != null)
            {
                var attribNames = element.GetAttributes().Select(a => a.Name.LocalName);
                res = Common.commonKeyValues
                      .Where(a => attribNames.Count() > 1 || string.IsNullOrWhiteSpace(a.ValueName))
                      .Select(a => new { MatchCount = KeyValueElementInfo.KeyMatchCount(a, element.Name.LocalName, attribNames), KeyValueInfo = a, })
                      .OrderByDescending(a => a.MatchCount)
                      .Where(a => a.MatchCount >= (attribNames.Count() == 1 ? 1 : 2))
                      .Select(a => a.KeyValueInfo)
                      .FirstOrDefault()
                ;
            }
            return(res);
        }