簡潔な方法を伝える連想配列方法
-
22-08-2019 - |
質問
みなければならないというニーズパス連想配列メソッドになっています。また、書き換えActionscript tweenパッケージC#ソースコードもラインの困りの"連想"アレイ/オブジェクト。通常Actionscriptかのように:
public function tween(obj:DisplayObject, params:Object = null):void {
if (params.ease != null) {
//do something
}
//...
}
このように呼ばれ:
tween(this, {ease:'out', duration:15});
を探していなければならないというニーズが同じクライアントまで、フルのC#.これまで、私た私のオプションのとおりです。
aクラスを作成や構造体を定義する可能param鍵の種類とその
b)パスのパラメータとして汎用タイプ
tween(frameworkElement, new {ease = 'out', duration = 15});
仮に
public static void tween(FrameworkElement target, object parameters);
アの方法で利用するのtween機能(なんなのかどのように、key=valueのこのオブジェクトです。そのアイデア?)
c)の作成 Dictionary<string, object>
のパラメータをtween機能
その他のアイデアやサンプルコードについて教えてください。今回が初めてC#.
編集
たのってあえぐ者はみな、私のところ当日に図とのこと:
"匿名の種類できない共有できる組み立てます。のコンパイラることがで匿名のタイプの指定された配列のプロパティ名/タペれます。通構造のアセンブリが必要となります正しく定義します。"
解決
編集:これは基本的にHtmlHelperの拡張は、ASP.NET MVCで使用するメカニズムです。それは私と一緒にオリジナルではないのです。
<時間>私は2つの異なるシグネチャを持つハイブリッド型のアプローチを好むと思います。注意:私はこれを試したことがない、あなたは、コンパイラは、それらの間で選択できるようにするために第二の方法にわずかに異なる名前を与える必要がありので、2つのシグネチャとの間に矛盾があるかもしれませんが、私はそうは思いません。 P>
public static void tween( FrameworkElement target, object parameters )
{
return tween( target, new ParameterDictionary( parameters ) );
}
public static void tween( FrameworkElement target,
ParameterDictionary values )
{
if (values.ContainsKey( "ease" ))
{
....
}
}
そして、あなたは匿名型にリフレクションを使用して辞書を設定ParameterDictionaryクラスを持っています。
public class ParameterDictionary : Dictionary<string,object>
{
public ParameterDictionary( object parameters )
{
if (parameters != null)
{
foreach (PropertyInfo info in parameters.GetType()
.GetProperties())
{
object value = info.GetValue(parameters,null);
this.Add(info.Name,value);
}
}
}
}
これは、あなたの使用と消費の容易さの両方のしやすさを与える - 「醜い」反射ものは辞書のためではなく、あなたの方法では、単一のコンストラクタに包まれています。そして、もちろん、辞書には、一度だけ書かれた反射コードと同様の目的のために何度も繰り返し使用することができます。
他のヒント
辞書は合理的なアプローチです。それは次のようになります。
public static void tween(FrameworkElement target, IDictionary<string, object> parameters)
{
if (parameters.ContainsKey("ease")) {
//do something
}
}
:あなたが値を渡すとき、あなたはそれが簡単に、同じようにするために短縮され、コレクションの初期化構文を使用することができます。マインド
tween(something, new Dictionary<string, object> { { "ease", "out" }, { duration, 15 } });
これは、ActionScriptコードとほぼ「同じことを」行うにはかなり簡単な方法だろうが、それは本当に素晴らしいのC#ではありません。それを行うためのC#-ish方法は、可能な各パラメータのプロパティを持つ本当のTweenParametersは、構造体やクラス作り、その後、トゥイーンに渡すものを作成することです()。これは、すべての「利用可能」プロパティは、トゥイーン()の内部に見もせずに、発信者には自明であるため、一般的に、より保守と考えられ、それはコンパイル時にエラーをキャッチするので、文字列の比較は次のように、実行時まで気づかないだろうとtypoing "期間" "duratoin" ます。
私はファンのオプション(b)自分のパ匿名式および構文解析の値を使用している。
見ているがその他の達成を使用して同じようにするとラムダ仕様の表現です。の呼び出しの書式連する情報を表示します
tween(frameworkElement, ease => "out", duration => 15);
とを宣言するもの:
public static void tween(FrameworkElement target, params Expression<Func<object>>[] parameters) { ... }
の考え方を取ることができるのが可変数の数を返しオブジェクト".まして構文解析パラメータの名前の各 表現<TDelegate>, は、呼び出しれに値する。
とは思わないことはよく映え匿名タイプでもう一つのアプローチの考慮が必要となります。
更新