static List <T> Find <T>(FunctionPointerGeneric <T> func, IEnumerable <T> source)
    {
        List <T> resultList = new List <T>();

        //IEnumerator<T> _iterator= source.GetEnumerator();
        // try
        // {
        //     while (_iterator.MoveNext())
        //     {
        //         T item = _iterator.Current;
        //         if (func(item))
        //         {
        //             resultList.Add(item);
        //         }
        //     }
        // }
        // finally
        // {
        //     _iterator.Dispose();
        // }
        foreach (T item in source)
        {
            if (func.Invoke(item))
            {
                resultList.Add(item);
            }
        }
        return(resultList);
    }
    static List <T> Find <T> (FunctionPointerGeneric <T> func, T[] source)
    {
        List <T> resultList = new List <T>();

        for (int i = 0; i < source.Length; i++)
        {
            if (func.Invoke(source[i]))
            {
                resultList.Add(source[i]);
            }
        }
        return(resultList);
    }