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