-2

除了语法之外,以下之间是否有任何区别:

Label.TextProperty.PropertyName //(Xamarin.Forms.BindableProperty.PropertyName)

nameof(myLabel.Text)

?

4

2 回答 2

0

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;
}
于 2017-11-17T14:44:12.483 回答
0

nameof由编译器处理成一个常量字符串,因此不会产生运行时成本。

第二个示例someObject.someProperty.PropertyName似乎不是有效的 C#,但如果它有效,将在运行时计算并在运行时产生成本。它是无效的,因为没有PropertyName属性驻留在每个属性上(比如说快几次)。

我能想到的与您的第二个示例相似的最接近的事情是对象的Name属性PropertyInfo。例如,typeof(MyThing).GetProperty("MyProperty").Name。但这不会解决您的问题,因为它对 string 进行了硬编码"MyProperty"

于 2017-11-17T14:44:23.160 回答