相关疑难解决方法(0)

寻找一种快速简便的方法来合并POCO上的所有属性

我有一些普通的类,有一堆简单的属性(简单的{get; set;}声明).所有属性都可以为空(或等效地,引用类型).

例如:

class POCO
{
  int? Field1 { get; set; }
  string Field2 { get; set; }
  ... etc ...
}
Run Code Online (Sandbox Code Playgroud)

我有一个场景,我正在逐步构建这些POCO,最后我想让其中一个包含所有非空字段.

一些说明性代码:

POCO o1 = LoadFields1To3();
POCO o2 = LoadFields4To5();
POCO o3 = LoadFields6To9();
... etc ...
Run Code Online (Sandbox Code Playgroud)

我们处于这种情况是因为某些字段是从SQL加载的(有时是不同的查询),而有些是从内存数据结构中加载的.我在这里重新使用POCO类型来避免一堆其他无意义的类(静态类型对于Dapper来说非常有用,而且一般来说).

我正在寻找的是将这些对象的属性合并为具有非null属性的单个属性的好方法.

就像是:

POCO final = o1.UnionProperties(o2).UnionProperties(o3) // and so on
Run Code Online (Sandbox Code Playgroud)

我能够保证在多个对象上没有字段为非null.虽然我假设一个解决方案会采用最左边的非空字段,但实际上并不是必需的.

我知道我可以写一些反射代码来做到这一点,但它有点讨厌和缓慢.

这确实需要通用,因为虽然我从不打算合并不同类型的对象,但是这种方法适用的类型非常多.

我想知道是否有一些更聪明的方式,也许 AB用动态?

c# reflection

14
推荐指数
1
解决办法
1791
查看次数

动态属性名称作为字符串

使用 DocumentDB 创建新文档时,我想动态设置属性名称,目前我设置SomeProperty,如下所示:

await client.CreateDocumentAsync("dbs/db/colls/x/" 
   , new { SomeProperty = "A Value" });
Run Code Online (Sandbox Code Playgroud)

,但我想SomeProperty从字符串中获取属性名称,以便我可以使用同一行代码访问不同的属性,如下所示:

void SetMyProperties()
{
    SetMyProperty("Prop1", "Val 1");
    SetMyProperty("Prop2", "Val 2");
}

void SetMyProperty(string propertyName, string val)
{
    await client.CreateDocumentAsync("dbs/db/colls/x/" 
       , new { propertyName = val });
}
Run Code Online (Sandbox Code Playgroud)

这有可能吗?

c# dynamic azure azure-cosmosdb

5
推荐指数
1
解决办法
1万
查看次数

标签 统计

c# ×2

azure ×1

azure-cosmosdb ×1

dynamic ×1

reflection ×1