private static GamelogicEngineCoil GuessCoilDeviceItem(IGamelogicEngineDeviceItem engineCoil, ICoilDeviceComponent device)
        {
            // if only one device item available, it's the one.
            if (device.AvailableCoils.Count() == 1 && string.IsNullOrEmpty(engineCoil.DeviceItemHint))
            {
                return(device.AvailableCoils.First());
            }

            // no hint, no guess..
            if (string.IsNullOrEmpty(engineCoil.DeviceItemHint))
            {
                return(null);
            }

            // match by regex if hint provided
            foreach (var deviceCoil in device.AvailableCoils)
            {
                var regex = new Regex(engineCoil.DeviceItemHint, RegexOptions.IgnoreCase);
                if (regex.Match(deviceCoil.Id).Success)
                {
                    return(deviceCoil);
                }
            }
            return(null);
        }
        private static IEnumerable <ICoilDeviceComponent> GuessCoilDevices(IEnumerable <ICoilDeviceComponent> coilDevices, IGamelogicEngineDeviceItem engineCoil)
        {
            List <ICoilDeviceComponent> devices = new List <ICoilDeviceComponent>();

            foreach (var device in coilDevices)
            {
                if (string.Equals(device.name, engineCoil.Id, StringComparison.OrdinalIgnoreCase))
                {
                    devices.Add(device);
                }
                else if (!string.IsNullOrEmpty(engineCoil.DeviceHint))
                {
                    var regex = new Regex(engineCoil.DeviceHint, RegexOptions.IgnoreCase);
                    if (regex.Match(device.name).Success)
                    {
                        devices.Add(device);
                    }
                }
                if (devices.Count() >= engineCoil.NumMatches)
                {
                    return(devices);
                }
            }
            return(devices);
        }