发布:2023/12/7 15:18:31作者:大数据 来源:大数据 浏览次数:428
nameof
表达式nameof
表达式的计算结果为符号的名称。 每当需要变量、属性或成员字段的名称时,这是让工具正常运行的好办法。
nameof
的其中一个最常见的用途是提供引起异常的符号的名称:
1 2 3 |
<span class="hljs-keyword">if</span> (IsNullOrWhiteSpace(lastName)) <span class="hljs-keyword">throw</span> <span class="hljs-keyword">new</span> ArgumentException(message: <span class="hljs-string">"Cannot be blank"</span>, paramName: <span class="hljs-keyword">nameof</span>(lastName)); |
另一个用途是用于实现 INotifyPropertyChanged
接口的基于 XAML 的应用程序:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
<span class="hljs-keyword">public</span> <span class="hljs-keyword">string</span> LastName { <span class="hljs-keyword">get</span> { <span class="hljs-keyword">return</span> lastName; } <span class="hljs-keyword">set</span> { <span class="hljs-keyword">if</span> (<span class="hljs-keyword">value</span> != lastName) { lastName = <span class="hljs-keyword">value</span>; PropertyChanged?.Invoke(<span class="hljs-keyword">this</span>, <span class="hljs-keyword">new</span> PropertyChangedEventArgs(<span class="hljs-keyword">nameof</span>(LastName))); } } } <span class="hljs-keyword">private</span> <span class="hljs-keyword">string</span> lastName; |
相较于使用常量字符串,使用
nameof
运算符的优点是工具可以了解符号。 如果使用重构工具重命名符号,会在nameof
表达式中对其重命名。 常量字符串没有这一优势。 请在你最喜爱的编辑器中亲自尝试一下:重命名一个变量,任何nameof
表达式也将更新。
nameof
表达式生成其参数(在前面的示例中为 LastName
)的非限定名称,即使使用参数的完全限定名称也是如此:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
<span class="hljs-keyword">public</span> <span class="hljs-keyword">string</span> FirstName { <span class="hljs-keyword">get</span> { <span class="hljs-keyword">return</span> firstName; } <span class="hljs-keyword">set</span> { <span class="hljs-keyword">if</span> (<span class="hljs-keyword">value</span> != firstName) { firstName = <span class="hljs-keyword">value</span>; PropertyChanged?.Invoke(<span class="hljs-keyword">this</span>, <span class="hljs-keyword">new</span> PropertyChangedEventArgs(<span class="hljs-keyword">nameof</span>(UXComponents.ViewModel.FirstName))); } } } <span class="hljs-keyword">private</span> <span class="hljs-keyword">string</span> firstName; |
此 nameof
表达式生成 FirstName
,而不是 UXComponents.ViewModel.FirstName
。
© Copyright 2014 - 2024 柏港建站平台 ejk5.com. 渝ICP备16000791号-4