c# - 在 C# 中,如何合并甚至删除两个几乎是 poltergeists 的 C# 类?
问题描述
我有两节课:
public class UploadedBankData : BankData {
[DataMember(Name = "sf__Id")]
public new string SalesforceId {
get => base.SalesforceId;
set => base.SalesforceId = value;
}
[DataMember(Name = "sf__Created")]
public bool SalesforceCreated { get; set; }
}
和
public class UploadedPersonAccount : PersonAccount {
[DataMember(Name = "sf__Id")]
public new string SalesforceId {
get => base.SalesforceId;
set => base.SalesforceId = value;
}
[DataMember(Name = "sf__Created")]
public bool SalesforceCreated { get; set; }
}
如您所见,除了类的名称和它们扩展的类之外,这两个类是相同的。
这些类之所以存在,是因为我正在使用ServiceStack.Text
将基类转换为 CSV,通过 Bulk API 2.0 将 CSV 上传到 Salesforce (必须对其 SaleforceId 进行注释,[IgnoreDataMember]
否则上传将失败),然后使用新生成的 SalesforceIds 将使用以下代码分配回相应的记录:
public Dictionary<string, T> Update<T, TU>(Dictionary<string, T> oldSObjectBySalesforceAccountId, RelayerContext context)
where TU : T
where T : AlternativeIdentifiable {
IConfiguration config = context.Config;
string url = $"{config["SalesforceInstanceBaseUrl"]}/services/data/{config["SalesforceVersion"]}/jobs/ingest/{context.job.Id}/successfulResults";
this.restClient.Get(url, context.token)
.FromCsv<List<AlternativeIdentifiable>>()
.ForEach((updatedBankData) => {
if (oldSObjectBySalesforceAccountId.TryGetValue(updatedBankData.GetAlternativeId(), out T oldSObject)) {
oldSObject.SalesforceId = updatedBankData.SalesforceId;
}
});
return oldSObjectBySalesforceAccountId;
}
由于该解决方案最终可能会支持其他 SObject,因此创建维护将需要许多几乎相同的类。
有没有更好的办法?
解决方案
推荐阅读
- javascript - 如何使用 PHP 将 UTF-8 编码为 Unicode 转义序列,如“\u00C1”?
- python - 如何将字符串中的数字转换为每个数字单独的列表
- symfony - 带有额外字段的多对多原则(更新和删除特定项目)
- flutter - Flutter 是否可以在没有 Google Play 服务的情况下工作?
- mysql - 如何删除 MySQL Query 中的重复行
- python - 在一个查询中创建模型的多个实例
- android - 分离时如何在片段中保存webview的状态?
- angular - 在进行 http 请求时使用 Observables 和 Subjects
- android - xml上图片位置的问题
- azure - AADSTS7000222:提供的客户端密钥已过期