2016-12-02 65 views
0

快速问题,我有一个泛型类,我正在实例化,但我遇到了在类中默认设置的基元的问题。设置通用的默认值

public class HeroLaunchData 
{ 
    public int player; 
    public int team; 
    //.... 
    public bool withAnimation = true; 
    //.... 

当我做新的通用这不是任何想法,为什么这可能是?

顺便说一句,我在做新样

public static T WoRDeserializer<T>(string serializedObj, char separator = ';') where T : class, new() 
{ 
    //... 
    T obj = new T(); 
    //... 

谢谢!

+0

如果我理解了你的问题,可能是default(T)。也不要张贴图片 – mybirthname

+0

这里不要转载。你可以发布你的文本代码吗? –

+0

@mybirthname这总是会产生'null'。 –

回答

1

对于任何通用类/方法必须使用default关键字设置默认值。

default Keyword in Generic Code (C# Programming Guide)

在泛型类和方法,有一个问题是出现是如何分配 默认值的参数化类型T的时候,你不知道 提前以下:

  • T是一个引用类型还是一个值类型。
  • 如果T是一个值类型,它将是数值还是结构。

给定一个参数化的类型T,该语句t的变量t =零 才有效,如果T是引用类型和t = 0将只 数值类型而不是结构工作。解决方案是使用默认关键字 ,该关键字将针对参考类型返回null,对于数值类型则返回零 。对于结构体,它将返回 的每个成员,初始化为0或null的结构体取决于它们是否为 值或引用类型。对于可为空的值类型,默认返回一个 System.Nullable,它与任何结构一样被初始化。

代替初始化T的新实例,在代码中使用`default(T)。

public static T WoRDeserializer<T>(string serializedObj, char separator = ';') where T : class, new() 
{ 
    //... 
    // T obj = new T(); 
    T obj = default(T); 
    //...