如何对T进行初始化?

cnwolfs 2014-02-14 12:37:24


public bool DeSerialize<T>(ref List<T> pEntityLis, ref T pEntity, string pEntityString)
{
这里头,如何初始化pEntity,原因是,我必须循环反系列化到pEntity,然后Add到pEntityLis
}



pEntity如果没有每个循环初始化的话,pEntityLis中的数据就会被覆盖。

...全文
551 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
cnwolfs 2014-03-20
  • 打赏
  • 举报
回复
sorry 这么久没有结贴
本拉灯 2014-02-20
  • 打赏
  • 举报
回复
为啥不把实列的当成参数带进来呢用Func<T> ccc
btman52 2014-02-20
  • 打赏
  • 举报
回复

public bool DeSerialize<T>(ref List<T> pEntityLis, ref T pEntity, string pEntityString) where T: new()
{
     T TEntity=new T();
}
加上new约束,并保证T具有无参公共构造函数即可
showjim 2014-02-19
  • 打赏
  • 举报
回复
    public struct clone<valueType>
    {
        private static readonly func<valueType, object> copyer;
        public static valueType MemberwiseClone(valueType value)
        {
            return (valueType)copyer(value);
        }
        static clone()
        {
            copyer = (func<valueType, object>)Delegate.CreateDelegate(typeof(func<valueType, object>), typeof(valueType).GetMethod("MemberwiseClone", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic));
        }
    }
Wang-Yucai 2014-02-19
  • 打赏
  • 举报
回复
泛型赋值是需要这样写的:

T defaultValue = default(T);
需要用default表达式。
cnwolfs 2014-02-14
  • 打赏
  • 举报
回复
引用 1 楼 feiyun0112 的回复:
var newEntity = Activator.CreateInstance(typeof(T)); newEntity.属性 = pEntity.属性 pEntityLis.Add(newEntity); ***************************************************************************** 签名档: http://feiyun0112.cnblogs.com/
var newEntity 的,不能Add到pEntityLis 我写成这样就可以通过,而且可以运行,不懂是否有别的办法


        public bool DeSerialize<T>(ref List<T> pEntityLis, string pEntityString, SerializePara pSerializePara)
        {
            try
            {
                int mESLength = pEntityString.Length;
                int mESStartIndex = 0;
                var mVarEntity = Activator.CreateInstance(typeof(T));
                T mEntity = (T)mVarEntity;


Wang-Yucai 2014-02-14
  • 打赏
  • 举报
回复
T tDefaultValue = default(T);
cnwolfs 2014-02-14
  • 打赏
  • 举报
回复
引用 4 楼 small21 的回复:
每次反序列化都会得到一个新的T类型pEntity,你传进来的是什么?初始化么用反射setvalue设置pEntity的值啊。PropertyInfo[] props = pEntity.GetType().GetProperties(); props[0].SetValue(pEntity,要设置的值); 类似这样。
pEntity也可以不传进来就是了。 T t=new T();这种写法是不行的。
慧眼识狗熊 2014-02-14
  • 打赏
  • 举报
回复
每次反序列化都会得到一个新的T类型pEntity,你传进来的是什么?初始化么用反射setvalue设置pEntity的值啊。PropertyInfo[] props = pEntity.GetType().GetProperties(); props[0].SetValue(pEntity,要设置的值); 类似这样。
angel6709 2014-02-14
  • 打赏
  • 举报
回复
你还可以这样,前提是T真的真的就是有【无参的构造方法】,T真的真的就实现了IEntity接口:

public interface IEntity
{
   string Name{get;set;}
}

public bool DeSerialize<T>(ref List<T> pEntityLis, ref T pEntity, string pEntityString) where T:IEntity,new()
{
    T t=new T();
    t.Name="hello";
      这里头,如何初始化pEntity,原因是,我必须循环反系列化到pEntity,然后Add到pEntityLis
}
angel6709 2014-02-14
  • 打赏
  • 举报
回复

public bool DeSerialize<T>(ref List<T> pEntityLis, ref T pEntity, string pEntityString) where T:new()
{
    T t=new T();
      这里头,如何初始化pEntity,原因是,我必须循环反系列化到pEntity,然后Add到pEntityLis
}
feiyun0112 2014-02-14
  • 打赏
  • 举报
回复
var newEntity = Activator.CreateInstance(typeof(T));
newEntity.属性 = pEntity.属性
pEntityLis.Add(newEntity);

*****************************************************************************
签名档: http://feiyun0112.cnblogs.com/

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧