Xamarin.Forms - Label.TextProperty.PropertyName和nameof(myLabel.Text)之间的区别

时间:2017-11-17 14:35:50

标签: c# properties xamarin.forms nameof

除语法外,之间存在任何的区别:

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

nameof(myLabel.Text)

2 个答案:

答案 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"进行硬编码。