GetCodePageByteSize() приватный Метод

private GetCodePageByteSize ( int codePage ) : int
codePage int
Результат int
Пример #1
0
        public override Encoding GetEncoding(int codepage)
        {
            if (codepage < 0 || codepage > 65535)
            {
                return(null);
            }

            if (codepage == 0)
            {
                // Retrieve the system default non-unicode code page if possible, or return null,
                // giving the rest of the EncodingProviders a chance to return a default.
                int systemDefaultCodePage = SystemDefaultCodePage;
                return(systemDefaultCodePage != 0 ?
                       GetEncoding(systemDefaultCodePage) :
                       null);
            }

            Encoding result = null;

            _cacheLock.EnterUpgradeableReadLock();
            try
            {
                if (_encodings.TryGetValue(codepage, out result))
                {
                    return(result);
                }

                int i = BaseCodePageEncoding.GetCodePageByteSize(codepage);

                if (i == 1)
                {
                    result = new SBCSCodePageEncoding(codepage);
                }
                else if (i == 2)
                {
                    result = new DBCSCodePageEncoding(codepage);
                }
                else
                {
                    result = GetEncodingRare(codepage);
                    if (result == null)
                    {
                        return(null);
                    }
                }

                _cacheLock.EnterWriteLock();
                try
                {
                    Encoding cachedEncoding;
                    if (_encodings.TryGetValue(codepage, out cachedEncoding))
                    {
                        return(cachedEncoding);
                    }

                    _encodings.Add(codepage, result);
                }
                finally
                {
                    _cacheLock.ExitWriteLock();
                }
            }
            finally
            {
                _cacheLock.ExitUpgradeableReadLock();
            }

            return(result);
        }