gpt4 book ai didi

c# - 将 "nameof"关键字与仅设置属性一起使用

转载 作者:太空狗 更新时间:2023-10-29 23:13:23 26 4
gpt4 key购买 nike

在我的函数中,我接收到实现 IMediaPanel 接口(interface)的对象:

public interface IMediaPanel
{
bool IsListsAreaVisible { get; }
bool IsNextEntityExists { set; }
}

private void InitConnections(IMediaPanel panelControl)
{
// Initialization logic
}

在初始化期间,我需要指定属性的名称,为此我使用 C# 6.0 nameof关键词:

nameof(IMediaPanel.IsListsAreaVisible)

这工作正常,但是用这个表达式:

nameof(IMediaPanel.IsNextEntityExists)

Visual Studio 显示以下错误:

The property 'MyNamespace.IMediaPanel.IsNextEntityExists' has no getter.

搜索“nameof limitations”没有给我关于这个问题的任何答案,而且官方的评论不包含对property getters的限制:

... The following are worth mentioning that produce errors: predefined types (for example, int or void), nullable types (Point?), array types (Customer[,]), pointer types (Buffer*), qualified alias (A::B), and unbound generic types (Dictionary<,>), preprocessing symbols (DEBUG), and labels (loop:). ...

谁能解释为什么有这个限制,是否有任何引用?什么原因可以强制 nameof 关键字使用属性的实例 getter 而它应该(我猜)只是通过反射使用一般类型信息? (至少在这种特殊情况下,当我由于类型未知而无法直接指向实例的属性时,我只知道这个实例实现接口(interface))

更新

为了解释为什么 @Gusdor 的评论建议不起作用,我需要阐明我如何调用 InitConnections 函数(以简化形式):

public void Init(FrameworkElement panelControl)
{
// ... Other logic ...
this.InitConnections((IMediaPanel) panelControl);
}

因此,如果我在 Init 函数中使用 nameof(panelControl.IsNextEntityExists),它将产生错误,因为 FrameworkElement 不包含自定义客户端的 IsNextEntityExists属性。如果我在 InitConnections 函数中使用相同的表达式,我会收到有关 getter 的错误 - 与 nameof(IMediaPanel.IsNextEntityExists) 相同。

无论如何,我找到了答案,这个“getter”错误是 ReSharper 的错误(参见我自己的答案)。

最佳答案

原来是 ReSharper 错误,至少当 ReSharper 暂停时错误没有显示(工具 -> 选项 -> ReSharper Ultimate -> 立即暂停),即使在 Visual Studio 中显示错误,项目也成功编译。

我当前的版本是:

  • JetBrains ReSharper Ultimate 10.0.2 内部版本 104.0.20151218.120627(ReSharper 10.0.20151218.130009)
  • Visual Studio 14.0.24720.0

更新

当我搜索如何向 ReSharper 团队提交错误时,我发现了一个非常相似的 issue在他们的跟踪器中。它是关于类成员属性的,但它给了我与我的接口(interface)相同的错误,所以我相信这是同一个错误。据说它将在 ReSharper 10.1 中修复。

关于c# - 将 "nameof"关键字与仅设置属性一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35793124/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com