2012-02-29 17 views
1

Xboxで使用されている場合、C#Xnaではオプションのパラメータは動作しません。コンパイル時にはサポートされません。その「未定義」の値にデフォルトでは、null theaseオプションのパラメータの数が多いC#XNA Xboxの場合、オプションのパラメータはオプションではありません

func(float? a = null, int? b = null) 

は、私はこのような状況があります。このような状況が必要です。これはないが、この単純化された上記の例で

は、オプションのパラメータが許す、アンラップすることができる。

func() 
func(float? a) 
func(int? b) 
func(float? a, int? b) 

をしかし、これは現実的ではないパラメータの数が多いです。

いくつかのパラメータの定義の組み合わせは許可されず、引数の例外をスローする関数のパスが返されます。その他のものは、パラメータの値によってさまざまなものが発生します。これは、同じ名前の関数間の多型に似ていますが、同じではありません。

代わりに、恐らく最も実際的には、代わりにすべてのパラメータを必要とする可能性があります。

func(float? a, int? b) 

次にように呼び出す:

func(null, 4) 

を最初に定義されていないところ。

XboxのC#XNAでオプションのパラメータを有効にする方法はありますか?上記のいずれかを使用する代わりに、

+1

あなたはクラスオブジェクトまたは必要としてもしなくてもよいのではなく15個のパラメータを渡すと考えていますか?それがあなたの問題を解決し、あなたに最も柔軟性を与えるように思えます。 –

+0

私は、クラスを構築しなければならないだろうし、いくつかのパラメータは、おそらく多くのseprate行のコードを定義するか、コンストラクタまたはそれ自身がオプションのパラメータを持つ他のメンバ関数を使用します。私はオプションのパラメータとしては良くないが、同じままでなければならないパラメータの順序を持​​たないという観点からは、func(null、4)のソリューションと大きく相容れないというのは悪い考えではない。 – alan2here

答えて

1

オプションのパラメータを有効にすることはできません。たぶんあなたは別の方法を使うことができます。配列を作成するparamsキーワードのように、パラメータとしてオブジェクトを渡すだけでよいでしょう。

public class MyParams 
{ 
    public float? a {get;set;} 
    public int? b {get;set;} 
} 

func(new MyParams { b = 5 }); 

このソリューションでは、必要に応じて柔軟に対応できます。新しい過負荷を追加/削除することなく、パラメータを追加したり削除したりすることができます。また、パラメータを削除または編集すると、複数のオーバーロードでは得られないコンパイル時エラーが発生します。

+0

Xbox 360のXNAゲームでは、これはおそらく容認できません。 –

3

私は、異なる数のパラメータを使用し、そこからのコールを「デフォルト」の値とともに転送する、古風なオーバーロードを使用します。呼び出し元にゼロコードが変更されます。

タイプがコントロール外にある場合:オーバーロードを追加する拡張メソッド。

+0

シミュレートされる15のオプションパラメータがある場合は難しい。 – alan2here

+0

この場合、関数の32,768個が過剰と思われます。 – alan2here

+0

まだ使用中の任意の順序で定義することができればいいです。 – alan2here

関連する問題