日期:2014-05-16  浏览次数:20955 次

如何对T进行初始化?


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



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


------解决方案--------------------
var newEntity = Activator.CreateInstance(typeof(T));
newEntity.属性 = pEntity.属性
pEntityLis.Add(newEntity);
  
*****************************************************************************
签名档: http://feiyun0112.cnblogs.com/
------解决方案--------------------

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

------解决方案--------------------
你还可以这样,前提是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
}

------解决方案--------------------
T tDefaultValue = default(T);
------解决方案--------------------
http://msdn.microsoft.com/zh-cn/library/sd2w2ew5.aspx
------解决方案--------------------
泛型赋值是需要这样写的:



T defaultValue = default(T);


需要用default表达式。
------解决方案--------------------
    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));
        }
    }

------解决方案--------------------

public bool DeSerialize<T>(ref List<T> pEntityLis, ref T pEntity, string pEntityString) where T: new()
{
&n