예제 #1
0
        /// <summary>
        /// 将数据写入器转换为具有键的类型的具体数据写入器。
        /// </summary>
        /// <param name="dataRW">数据写入器</param>
        /// <typeparam name="T">键的类型</typeparam>
        /// <returns>返回具体数据写入器</returns>
        public static IDataRW <T> As <T>(this IDataRW dataRW)
        {
            if (dataRW is IDataRW <T> tRW)
            {
                return(tRW);
            }

            if (dataRW is IAsDataRW asRW)
            {
                return(As <T>(asRW.Original));
            }

            if (dataRW is IDataRW <string> strRW)
            {
                return(new AsDataRW <string, T>(strRW));
            }

            if (dataRW is IDataRW <int> intRW)
            {
                return(new AsDataRW <int, T>(intRW));
            }

            if (AsHelper.GetInstance(dataRW) is AsHelper asHelper)
            {
                return(asHelper.As <T>(dataRW));
            }

            throw new NotSupportedException("Unsupported object.");
        }
예제 #2
0
        /// <summary>
        /// 获取数据读写器中指定键的值的类型。
        /// </summary>
        /// <typeparam name="TKey">键类型</typeparam>
        /// <param name="dataRW">数据读写器</param>
        /// <param name="key">指定键</param>
        /// <returns>返回一个类型</returns>
        public static Type GetItemType <TKey>(IDataRW <TKey> dataRW, TKey key)
        {
            var auxiliary = new AuxiliaryValueRW();

            dataRW.OnReadValue(key, auxiliary);

            return(auxiliary.GetValueType());
        }
예제 #3
0
        /// <summary>
        /// 获取数据读写器中指定键的值的类型。
        /// </summary>
        /// <typeparam name="TKey">键类型</typeparam>
        /// <param name="dataRW">数据读写器</param>
        /// <param name="key">指定键</param>
        /// <returns>返回一个类型</returns>
        public static Type GetItemType <TKey>(IDataRW <TKey> dataRW, TKey key)
        {
            var auxiliary = new AuxiliaryValueRW();

            if (typeof(TKey) == typeof(long) && ((dataRW as IAsDataReader)?.Content ?? dataRW) is IId64DataRW id64DataRW)
            {
                id64DataRW.OnReadValue(Unsafe.As <TKey, long>(ref key), auxiliary);
            }
            else
            {
                dataRW.OnReadValue(key, auxiliary);
            }

            return(auxiliary.GetType());
        }
예제 #4
0
        /// <summary>
        /// 将数据写入器转换为具有键的类型的具体数据写入器。
        /// </summary>
        /// <param name="dataRW">数据写入器</param>
        /// <typeparam name="T">键的类型</typeparam>
        /// <returns>返回具体数据写入器</returns>
        public static IDataRW <T> As <T>(this IDataRW dataRW)
        {
            if (dataRW is IDataRW <T> t)
            {
                return(t);
            }

            if (dataRW is IAsDataRW a)
            {
                return(As <T>(a.Content));
            }

            if (dataRW is IDataRW <string> s)
            {
                return(new AsDataRW <string, T>(s));
            }

            if (dataRW is IDataRW <int> i)
            {
                return(new AsDataRW <int, T>(i));
            }

            return(AsHelper.GetInstance(dataRW).As <T>(dataRW));
        }
예제 #5
0
 public override IDataRW <TOut> As <TOut>(IDataRW dataRW)
 {
     return(new AsDataRW <T, TOut>((IDataRW <T>)dataRW));
 }
예제 #6
0
 public abstract IDataRW <TOut> As <TOut>(IDataRW dataRW);
예제 #7
0
 public static AsHelper GetInstance(IDataRW dataRW)
 {
     return(RWCache.GetOrCreate(dataRW));
 }
예제 #8
0
파일: AsDataRW.cs 프로젝트: cardinals/Yus
 /// <summary>
 /// 创建数据读写器键类型转换类的实例。
 /// </summary>
 /// <param name="dataRW">原始数据读写器</param>
 public AsDataRW(IDataRW <TIn> dataRW)
 {
     this.dataRW = dataRW;
 }
예제 #9
0
 public static AsHelper GetInstance(IDataRW dataRW) => GetOrCreateGroup(dataRW).RW;