我dynamic在视图模型中使用对象,因为我发现使用 Automapper 之类的东西不必要的开销,并且发现这种方法更加灵活和轻量级。我正在使用来自即兴界面的构建器,如下所示:
private dynamic New = Builder.New();
private dynamic GetViewModel(Product p)
{
var viewModel = New.Product( id : p.Id, name : p.Name );
viewModel.AdditionalProperty = "some additional data";
return viewModel;
}
Run Code Online (Sandbox Code Playgroud)
在某些情况下,“扩展”实际对象会比逐一重新映射所有属性更好,类似于在 JavaScript 中使用jQuery.extend()
private dynamic GetViewModel(Product p)
{
var viewModel = //create base dynamic object, that has all the members of p.
viewModel.AdditionalProperty = "some additional data";
return viewModel;
}
Run Code Online (Sandbox Code Playgroud)
这应该可以通过ExpandoObject结合反射和迭代所有成员来实现,但我想知道是否有更干净/更整洁的解决方案。
我不确定这是否可行,经过漫长的研究,我没有找到确凿的结论.
我试图从字典中动态创建一个新对象(本身是一个新类型).所以说我有键和值,键和值将成为返回值的属性.我可以这样使用的东西:
示例代码
public T getObject(Dictionary<string, string> myDict)
{
// make a new object type with the keys and values of the dictionary.
// sample values in dictionary:
// id : 112345
// name: "greg"
// gender: "m"
// Eventually also make the interface?
}
// Somewhere else:
var myNewObject = helper.getObject();
// what is expected here is that when I type myNewObject.
// I get id, name, gender as suggestions
int id = myNewObject.Id;
Run Code Online (Sandbox Code Playgroud)
对我来说重要的是从中获取智能感知.所以我可以输出object.所有键的类型和建议.这样我就不需要提前知道字典才能访问这些值(否则我只会使用字典).
我已经看过 …