C#属性传入属性名称,并将计算所得的值分配给该属性

时间:2019-07-03 06:33:24

标签: 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()

1 个答案:

答案 0 :(得分:2)

TL; DR:没有。

一般来说不可能。而且,如果仅在某些情况下可行,那么在没有分配属性的情况下,假设的AssigneeNameAtttribute会做什么?

考虑:

var temp = doc.GetStringValueOrDefault();
outputDoc.Prop = temp;

temp不仅对elementName的{​​{1}}参数值没有帮助,它还可能被优化器删除,导致取决于编译设置的不同行为。

GetStringValueOrDefault不同–总是有一个呼叫者–受让人可能不存在是任何有用的格式。考虑另一种情况:

CallerMemberNameAttribute