gpt4 book ai didi

C# 获取类的非静态属性的名称

转载 作者:行者123 更新时间:2023-11-30 15:10:37 25 4
gpt4 key购买 nike

我有一个问题与另一个问题非常相似:Get name of property as a string .

他的解决方案以

结束
// Static Property 
string name = GetPropertyName(() => SomeClass.SomeProperty);

// Instance Property
string name = GetPropertyName(() => someObject.SomeProperty);

我想要的是具有类似于静态属性但用于实例属性的语法。

原因是我现在有代码使用反射来获取集合中所有对象的属性值,但我必须将其作为硬编码字符串传递。

示例代码:

double Sum = AmountCollection.Sum("thatfield");  

嗯,这很好用,但如果“thatfield”被重命名,代码将不再有效。编译器无法检查它,因为它只是一个字符串。同样,出于同样的原因,Get References 也不起作用。

那么,有没有办法实现从实例属性中轻松获取属性名称(即,只是一个函数调用)的目标?

谢谢。

最佳答案

试试这个:

string name = GetPropertyName(() => default(SomeClass).SomeInstanceProperty);

您可能会收到有关“总是导致 System.NullReferenceException”的编译器警告,但这实际上并没有发生,因为您没有执行表达式,这意味着您可以安全地丢弃此警告。如果你想摆脱它,要么通过 pragma 禁用它,要么只是将 default() 调用移动到这样的函数中:

public static T Dummy<T>() {
return default(T);
}

string name = GetPropertyName(() => Dummy<SomeClass>().SomeInstanceProperty);

关于C# 获取类的非静态属性的名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3124475/

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