gpt4 book ai didi

c# - 如何将属性转换为其名称?

转载 作者:行者123 更新时间:2023-11-30 19:59:42 26 4
gpt4 key购买 nike

谁能帮我解决这个问题:

public class MyClass
{

public int MyProperty{ get; set; }


private void MyMethod()
{
// here I wat to get the name of MyProperty.
// string name = "MyProperty"; <-- I don't want to hardcode it like this.
}
}

我不想对其进行硬编码。可能吗?

谢谢你

最佳答案

一个选择是使用表达式树:

var name = ExpressionTrees.GetPropertyName<MyClass, int>(x => x.MyProperty);

...


public static class ExpressionTrees
{
public static string GetPropertyName<TSource, TTarget>
(Expression<Func<TSource, TTarget>> expression)
{
...
}
}

(替代方法可以帮助进行类型推断,但我在这里切入正题。)

如果你重命名 MyProperty,那么如果你这样做是为了重构你在调用 GetPropertyName 时的用法也会改变,否则你会得到一个编译-时间失败。

Stack Overflow 上有很多关于如何从表达式树中提取名称的帖子,但值得一提的是,这仍然是一种可能存在缺陷的方法 - 没有什么可以阻止您编写:

ExpressionTrees.GetPropertyName<MyClass, int>(x => 0);

您可以在执行时检测到它,但不能在编译时检测到。还有性能问题 - 它不会可怕,但可能不理想

根据您的要求(在这种情况下,正是您想要识别该属性而不是另一个属性的原因),其他方法可能也很有效,例如属性。

关于c# - 如何将属性转换为其名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23308259/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com