设置generic的默认值

时间:2016-12-02 08:19:49

标签: c# generics unity3d

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

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();
    //...

谢谢!

1 个答案:

答案 0 :(得分:1)

要为任何通用类/方法设置默认值,您必须使用default关键字。

default Keyword in Generic Code (C# Programming Guide)

  

在通用类和方法中,出现的一个问题是如何分配   当你不知道时,参数化类型T的默认值   提前关注:

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

给定参数化类型T的变量t,语句t = null   仅当T是引用类型且t = 0才有效时才有效   数值类型,但不适用于结构。解决方案是使用   default关键字,它将为引用类型返回null并为零   对于数值类型。对于结构,它将返回每个成员   struct初始化为零或null,具体取决于它们是否为   价值或参考类型。对于可为空的值类型,default返回a   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);
    //...