private bool DoesModelPassFilters(int modelID, IGameDataModel modelData) { List <GameDataModelFilter> filters = null; if (_filters.ContainsKey(modelID)) { filters = _filters[modelID]; } else { return(true); } FieldInfo[] fields = GameDataModel.GetFields(modelData.GetType()); object[] attrs = null; foreach (FieldInfo field in fields) { attrs = field.GetCustomAttributes(typeof(DataField), true); foreach (object attr in attrs) { DataField fieldAttr = attr as DataField; if (fieldAttr != null && fieldAttr.useForFiltering) { object value = field.GetValue(modelData); foreach (GameDataModelFilter filter in filters) { if (filter.PropertyName != null && filter.PropertyName.Equals(field.Name)) { if (field.FieldType == typeof(string)) { if (!filter.CompareToString(value)) { return(false); } } else if (field.FieldType == typeof(int)) { if (!filter.CompareToInt(value)) { return(false); } } else if (field.FieldType == typeof(float)) { if (!filter.CompareToFloat(value)) { return(false); } } else if (field.FieldType == typeof(bool)) { if (!filter.CompareToBool(value)) { return(false); } } } } } } } return(true); }
private FieldInfo[] GetFields(IGameDataModel target) { return(GetFields(target.GetType())); }