标签: impromptu-interface

将静态类型对象扩展为动态对象

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结合反射和迭代所有成员来实现,但我想知道是否有更干净/更整洁的解决方案。

c# dynamic impromptu-interface

3
推荐指数
1
解决办法
3271
查看次数

用反射制作新物体?

我不确定这是否可行,经过漫长的研究,我没有找到确凿的结论.

我试图从字典中动态创建一个新对象(本身是一个新类型).所以说我有键和值,键和值将成为返回值的属性.我可以这样使用的东西:

示例代码

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.所有键的类型和建议.这样我就不需要提前知道字典才能访问这些值(否则我只会使用字典).

我已经看过 …

c# intellisense dynamic clay impromptu-interface

0
推荐指数
1
解决办法
114
查看次数

标签 统计

c# ×2

dynamic ×2

impromptu-interface ×2

clay ×1

intellisense ×1