/// <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."); }
/// <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()); }
/// <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()); }
/// <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)); }
public override IDataRW <TOut> As <TOut>(IDataRW dataRW) { return(new AsDataRW <T, TOut>((IDataRW <T>)dataRW)); }
public abstract IDataRW <TOut> As <TOut>(IDataRW dataRW);
public static AsHelper GetInstance(IDataRW dataRW) { return(RWCache.GetOrCreate(dataRW)); }
/// <summary> /// 创建数据读写器键类型转换类的实例。 /// </summary> /// <param name="dataRW">原始数据读写器</param> public AsDataRW(IDataRW <TIn> dataRW) { this.dataRW = dataRW; }
public static AsHelper GetInstance(IDataRW dataRW) => GetOrCreateGroup(dataRW).RW;