list - 在 C# 中,当列表和枚举类型中的对象没有公共继承或接口时,是否可以删除代码重复?
问题描述
我们从 Praxedo 导入了多个 WSDL 文件。在使用这些 WSDL 文件时,有时我想摆脱代码重复。
具体来说,我有多个代码实例,如下所示:
private static customer ToSomething(OurConfig config)
{
// Snip! ... do some irreverent things.
List<contact> contacts = new();
AddIfValid(contacts, config.Phone, type.PHONE);
AddIfValid(contacts, config.PrimaryContact?.Phone, type.MOBILE);
AddIfValid(contacts, config.PrimaryContact?.Email, type.EMAIL);
// Maybe some more things like this...
// Snip! ... do moreirreverent things.
return something;
}
private static List<contact> AddIfValid(List<contact> contacts, string value, type contactType)
{
if (!string.IsNullOrEmpty(value))
{
contacts.Add(new()
{
coordinates = value,
type = contactType,
typeSpecified = true
});
}
return contacts;
}
棘手的地方:
对象contact
和enum
类型在从 WSDL 生成的每个 Reference.cs 中分别实现,我们不想修改这些类来为它们添加任何公共父级或接口(无论如何,这甚至可能与枚举无关) .
有没有办法:
我可以声明
AddIfValid()
采用类型参数的方法吗?假设每个实例上都存在所有枚举值,有什么方法可以提取块
List<contact> contacts = new();
AddIfValid(contacts, config.Phone, type.PHONE);
AddIfValid(contacts, config.PrimaryContact?.Phone, type.MOBILE);
AddIfValid(contacts, config.PrimaryContact?.Email, type.EMAIL);
那我可以重复使用吗?
(类型OurConfig
是我们的。目前它总是完全相同的类型,如果需要或需要,我们可以修改它。)
解决方案
推荐阅读
- ios - DocumentPicker 使用“public.folder”documentTypes 初始化时无法访问第三方存储
- rest - JAX-RS REST 应用程序没有响应 XML 响应。JAXB 错误
- javascript - Ionic 请提供有效的 ISO 8601 日期时间格式日期时间问题
- angularjs - Cordova Android 构建错误“无法读取 null 的属性‘版本’”
- android - 在 Android IMA 的伴随广告中显示 Gif 或 HTML
- python - /updatestudent/3 处的 Django ValueError 无法分配“'1'”:“Student.class_id”必须是“Class”实例
- css - CSS 覆盖 - MAT-TABLE - Angular Material 11
- php - 超级奇怪的 PHP 翻译解决方法
- java - 代码相同,但弹出菜单在另一个活动中看起来不同
- db2 - db2 控制台访问问题