c# - C# 属性传递将分配给计算值的属性名称
问题描述
我创建了一个从 XML 节点解析值的辅助方法,但此时我必须将属性名称传递给必须分配的值。
我知道该[CallerMemberName]
属性,但我想知道是否有一个属性可用于自动获取将分配值的属性名称。
例如:
现在的情况
我有这个扩展方法:
public static string GetStringValueOrDefault(this XmlNode node, string elementName) =>
node[elementName]?.InnerText ?? default;
像这样称呼它:
PrinterSettings.PrinterName = printerSettingsElement.GetStringValueOrDefault(nameof(PrinterSettings.PrinterName))
期望的情况
相同的扩展方法,带有一个属性:
public static string GetStringValueOrDefault(this XmlNode node, [AssigneeName] string elementName) =>
node[elementName]?.InnerText ?? default;
我编了这个[AssigneeName]
属性,但我想你明白了。
应该这样调用,这样更干净:
PrinterSettings.PrinterName = printerSettingsElement.GetStringValueOrDefault()
解决方案
TL;DR:没有。
而且一般情况下是不可能的。如果它只在某些情况下有效,那么AssigneeNameAtttribute
当没有分配属性时假设会做什么?
考虑:
var temp = doc.GetStringValueOrDefault();
outputDoc.Prop = temp;
不仅对参数值temp
没有帮助,它很可能被优化器删除,导致不同的行为取决于编译设置。elementName
GetStringValueOrDefault
与CallerMemberNameAttribute
- 总是有一个调用者不同 - 受让人可能不存在任何有用的格式。考虑另一种情况:
var results = doc.Elements()
.Select(e => new { e.Name, Value = e.GetStringValueOrDefault())
.ToList();
推荐阅读
- python - Python DBSCAN 自己的 csv 文件而不是随机数据
- smb - JCIFS SMB 错误 - 无法连接 - 无效负载大小:532
- graphql - WSO2 上的自省 GraphQL
- django - Django过滤器的使用
- reactjs - cookie 是用 fetch 存储的,但不是用 axios 存储的
- angular - beforeEach 在 MockRender 调用中没有错误地死掉
- video - 使用 vmaf 和 ffmpeg 的正确方法
- python - 如何将列表输入传递给遍历树的函数?
- javascript - 使用 AJAX 获取表单数据并将其存储到数据库中,提交时它给了我最大调用堆栈大小超出
- class - 检查是否在 TCL OO 中定义了一个类,而不是使用 catch