/// <summary> Finds a resource with a given name. This method returns null if no
        /// resource with this name is found.
        /// </summary>
        /// <param name="name">name of the desired resource
        /// </param>
        /// <returns> a java.io.InputStream object
        /// </returns>
        public virtual Stream GetResourceAsStream(string name)
        {
            if (bestCandidate != null)
            {
                try
                {
                    return(bestCandidate.GetResourceAsStream(name));
                }
                catch (Exception)
                {
                    bestCandidate = null;
                }
            }

            Stream          result     = null;
            ITypeLoadHelper loadHelper = null;

            foreach (ITypeLoadHelper lh in loadHelpers)
            {
                loadHelper = lh;

                result = loadHelper.GetResourceAsStream(name);
                if (result != null)
                {
                    break;
                }
            }

            bestCandidate = loadHelper;
            return(result);
        }