2011-09-20 10 views
1

店舗情報のための構造を単純にしたい。私の問題は、格納された値をクリアする内部メソッドを作成することです。C#内部Clear()メソッドを使用した構造

public struct GraphValues 
    { 
     public int min, max, ...; 

     public GraphValues(int min, int max, ...) 
     { 
      this.min = min; 
      this.max = max; 
      ... 
     } 

     public static void Clear(this GraphValues values) 
     { 
      values.min.Equals(null); 
      values.max.Equals(null); 
      ... 
     } 
    } 

したがって、この構造体に新しい値を書き込むには、OKです

GraphValues val = new GraphValues() 
val.max = 12; 
val.min = 1; 

が、私はヌルにすべての構造体valueasを設定します。何かを呼び出す

val.Clear(); 

いいですか? Thnaks

+0

私は、私とマークの答えを一緒に使って、このすべてを書き直すことをお勧めします。 – Kon

答えて

2

Clear()メソッド定義から 'static'キーワードを削除して、GraphValuesオブジェクトの各インスタンスで使用できるようにします。また、パラメータを渡す必要はありません。Clear()メソッド内では、すべてのメンバーにアクセスできます。そして、に設定してをnullに設定し、値をnullと比較しないようにします。

public void Clear() 
    { 
     this.min = null; 
     this.max = null; 
     ... 
    } 

これはなぜ構造体ですか?ちょうどクラスを使用します。

+2

各インスタンスで利用できます。クラスのクラスの拡張メソッドにしました。それは、少なくとも創造的です。 –

+0

ええと...クリエイティブは私が使った言葉ではありません。 :) – Kon

+0

どのようにコンパイルすることができますか?拡張メソッドは静的クラスでなければなりません。 –

7
  1. 構造体を変更することはできません。あなたのタイプを代わりにクラスにする。
  2. null値を許可するには、null可能な型を使用します。
  3. パブリックフィールドの代わりにプロパティを使用します。

固定コード:

//val.Clear();   // Don't do this. 
val = new GraphValues(); // Just create a new object. 

public class GraphValues 
{ 
    public int? Min { get; set; } 
    public int? Max { get; set; } 
    // etc... 

    public void Clear() 
    { 
     Min = null; 
     Max = null; 
     // etc... 
    } 
} 

私はまた、新しいオブジェクトを作成した方がよいの代わりに、nullに既存のオブジェクトのフィールドを設定するかどうあなたが検討することをお勧めしたいです

関連する問題