おかげで私はそれをExpandoObjectを使用して、外出先を与え、それは次のように働いてしまった:最後の行は、それが通過することができるようにMVCで働いて、それを得るための鍵となった
dynamic viewData = new ExpandoObject();
[email protected] = cssClasses;
if (controlId != null)
viewData.id = controlId;
if (title != null)
viewData.title = title;
// put the result into a route value dictionary so that MVC's EditorFor (etc) can interpret it
var additionalViewData = new RouteValueDictionary(viewData);
ことEditorForなどのadditionalViewDataパラメータとして使用します。
私が匿名クラスを渡して自分自身に追加する必要がある状況では、リフレクションを使用しています(IDictionaryを実装するExpandoObjectを利用しています)。
[TestMethod]
public void ShouldBeAbleToConvertAnAnonymousObjectToAnExpandoObject()
{
var additionalViewData = new {id = "myControlId", css = "hide well"};
dynamic result = new ExpandoObject();
var dict = (IDictionary<string, object>)result;
foreach (PropertyInfo propertyInfo in additionalViewData.GetType().GetProperties(BindingFlags.Instance | BindingFlags.Public))
{
dict[propertyInfo.Name] = propertyInfo.GetValue(additionalViewData, null);
}
Assert.AreEqual(result.id, "myControlId");
Assert.AreEqual(result.css, "hide well");
}
これはどちらかというと、代わりに 'ExpandoObject'で' dynamic'を使用します:) –
@Patrykíwiek私はかなりexpandoObject tbhが好きです、それはかなりクールです。 –
なぜあなたはコードに 'object'を残さなかったのか分かりません。問題の両方の匿名型は 'object'です。 –