2016-12-02 18 views
0

簡単な質問、私はインスタンス化しているジェネリッククラスを持っていますが、クラスにデフォルトで設定されているプリミティブに問題があります。ジェネリックのデフォルト値を設定する

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

私がジェネリックの新版を作成するとき、これはasignedではありませんが、これはなぜでしょうか?

ところで、私は

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

おかげのような新しいをやっています!あなたがdefaultキーワードを使用する必要があり任意のジェネリッククラス/メソッドのデフォルト値を設定する

+0

私はあなたの質問を理解していればおそらくデフォルト(T)です。また、画像を投稿しないでください – mybirthname

+0

ここには再現されていません。あなたが持っているコードをテキストとして投稿できますか? –

+0

@mybirthnameこれは常に「null」を生成します。 –

答えて

1

。ジェネリッククラスとメソッドで

default Keyword in Generic Code (C# Programming Guide)

、発生する1つの問題は、事前に以下の がわからないときにパラメータ化された型Tに にデフォルト値を割り当てる方法である:

  • Tが参照型であるか値型であるか。
  • Tが数値型か構造体かにかかわらず、値型である場合。パラメータ化された型Tの変数tを考える

、ステートメントトン= nullを は、Tが参照型とtの場合= 0だけではなく、構造体のための 数値タイプのために動作しますのみ有効です。解決策は、 defaultキーワードを使用することです。これは、参照型にnullを返し、数値型にはゼロを返します。 構造体の場合は、 の各メンバーを戻します。 値か参照型かによって、構造体はゼロまたはnullに初期化されます。 null可能な値の型の場合、defaultは 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); 
    //... 
関連する問題