除语法外,之间存在任何的区别:
Label.TextProperty.PropertyName //(Xamarin.Forms.BindableProperty.PropertyName)
和
nameof(myLabel.Text)
答案 0 :(得分:0)
nameof(someObject.someProperty)为您提供属性的名称(someProperty)
调用someObject.someProperty返回一个值,该值在属性中定义,因此如果你有一个像int myProperty {get;set;}
这样的属性,它将返回一个int类型的对象。 int-type没有可以调用的propertyName属性或函数。
我知道comeObject.someProperty.ProeprtyName不会失败的唯一情况是属性someProperty返回PropertyInfo类型的对象。
您可以通过反射获取每个Property的PropertyInfo。
foreach(var propertyInfo in someObject.GetType().GetProperties())
{
string propertyName = propertyInfo.PropertyName;
}
答案 1 :(得分:0)
nameof
由编译器处理为常量字符串,因此不会产生运行时成本。
第二个示例someObject.someProperty.PropertyName
似乎不是有效的C#,但如果它有效,将在运行时计算并在运行时产生成本。它是无效的,因为没有PropertyName
属性驻留在每个属性上(比如快几次)。
我能想到的最接近于第二个示例的是Name
对象上的PropertyInfo
属性。例如,typeof(MyThing).GetProperty("MyProperty").Name
。但这不会解决您的问题,因为它会对字符串"MyProperty"
进行硬编码。