public T Find(IFilter <T> filter)
        {
            T obj;

            for (int i = 0; i < this.list.Count; i++)
            {
                obj = LanguageUtility.ConvertValue <T>(this.list[i]);
                if (filter.Matches(obj))
                {
                    return(obj);
                }
            }
            return(default(T));
        }
        public List <T> FindAll(IFilter <T> filter)
        {
            List <T> outList = new List <T>();
            T        obj;

            for (int i = 0; i < this.list.Count; i++)
            {
                obj = LanguageUtility.ConvertValue <T>(this.list[i]);
                if (filter.Matches(obj))
                {
                    outList.Add(obj);
                }
            }

            //if nothing found then return null, otherwise return list
            return(outList.Count > 0 ? outList : null);
        }