问题标签 [nameof]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
425 浏览

c# - VB.Net 等价于 C# nameof 用法

是否有与以下 C#nameof用法等效的 VB.Net:

注意:MyClass 是一个泛型类,MyPropertyprivate.

我只能为具有Friend属性的非泛型类编写以下代码,否则编译器会抱怨MyClass.MyProperty is not accessable in this context because it is 'Private'

0 投票
3 回答
226 浏览

c# - 获取作为参数传递的变量的原始名称?

需要明确的是,这不是这个问题的重复。显然,我可以使用nameof运算符来获取变量或参数的名称;我知道。但是有没有一种方法可以获得传递给方法的变量的原始名称?目前,我必须这样做:

我这样称呼它:

但我正在寻找一种方法来避免重复提供变量的名称,而是使用类似的东西:

Foo这种情况下,其中 将是:

在 .NET 中可以实现这样的目标吗?


更新:

我没有想到传递给的Foo可能是表达式而不是其他人在评论中建议的变量。现在想想,似乎不可能实现什么_除非我可以(以某种方式)保证总会有一个变量?听起来很远,TBH,但也许那里有解决方案。

更新#2:

人们问我真正想要达到的目标。好吧,它与上面的第一种方法非常相似,但如果这会有所帮助,这是我正在使用的实际方法:

我在这样的事情上使用它:

但我正在寻找一种方法来避免重复提供变量的名称。

0 投票
0 回答
204 浏览

c# - nameof 什么时候产生一个完全限定的名称?

微软关于 nameof 运算符的文档指出“在类型和命名空间的情况下,生成的名称通常不是完全限定的”。例如,nameof(System.Collections.Generic)yield"Generic"和 not "System.Collections.Generic"

请注意,他们说“通常”。那么,在哪些不寻常的情况下,生成的名称实际上是完全限定的?

0 投票
2 回答
102 浏览

visual-studio-2015 - IronRuby 无法编译使用“nameof”运算符的 c# 项目

我有一个包含许多解决方案的大型 WPF 应用程序,每个解决方案都有许多项目。IronRuby (v1.0.4) 脚本用于按顺序编译所有项目。

问题陈述
IronRuby 脚本无法编译使用“nameof”运算符的项目,并出现以下错误:

  • 在装有 Visual Studio 2017 和 2019 的机器上会出现故障。
  • 在装有 Visual Studio 2015 的机器上运行良好。
  • 如果我在 VS 20XX 中单独编译项目,项目会被正确编译——但这违背了拥有 IR 脚本的目的。

我到处搜索,但找不到它不适用于更高版本的 Visual Studio 的原因。

软件堆栈
1. IronRuby 版本:1.0.4
2. 网络版本:4.5.2 及以上
3. 工作 VS 版本:2015 更新 3
3.(a) MSBuild 工具版本:14.0

C:\Program Files (x86)\MSBuild\14.0\Bin>MSBuild.exe -version Microsoft (R) Build Engine version 14.0.27522.0 版权所有 (C) Microsoft Corporation。版权所有。

14.0.27522.0

3.(b) 从命令提示符编译项目时的消息:

  1. 不工作的 VS 版本:2019 (v16.2.3)
    4.(a) MSBuild 工具版本:16.0

C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\MSBuild\Current\Bin>MSBuild.exe -version Microsoft (R) Build Engine version 16.2.37902+b5aaefc9f for .NET Framework 版权所有 (C) Microsoft Corporation . 版权所有。

16.2.37902.0

4.(b) 从命令提示符编译项目时的消息:

Microsoft (R) Build Engine 版本 4.7.3190.0
[Microsoft .NET Framework,版本 4.0.30319.42000] 版权所有 (C) Microsoft
Corporation。版权所有。

  1. 两台机器上的 MSBuild 版本给出了相同的结果:

将 3(a)、3(b) 与 4(a)、4(b) 进行比较,看起来在更高版本的 VS 构建引擎中存在断开连接,但我无法解决阻止我去的问题到更高的VS版本。

任何帮助表示赞赏。

谢谢,
RDV

0 投票
1 回答
125 浏览

c - 在 C 中是否有类似 C# 的名称用于定义指令?

我有经典

有没有办法"SOME_CONSTANT"像 C# 一样获取字符串nameof(field)

编辑

我必须解析一个文件来寻找一些关键字:

如果我调用foo("KEY_A")它应该返回 1

0 投票
3 回答
455 浏览

c# - 如何在方法内部获取传递参数的nameof()?

我正在为我的项目寻找解决方案,我有Dictionary<string, object>一个辅助方法,女巫正试图从这本字典中获取一些特定的价值。

正如您在下面看到的,如果我没有 a stringKey,我会尝试stringKey@object( 现在它将返回"object" ) 中获取它。当然,我可以在打电话时做到这一点,但对我来说这看起来太糟糕了。

有没有办法在这种方法中做到这一点?

调用示例:

方法中的期望stringKey"Browser",因为在这种情况下:

有特定的需求,我们目前无法将该字典重构为我们的对象或我们的类,调用 withnameof()是可能的,但不是解决方案。

0 投票
2 回答
335 浏览

c# - 是否可以为 C# nameof 运算符编写包装器?

我阅读了有关运营商的相关问答nameof但它对我没有帮助,所以我在这里问它。

我想为 C#nameof运算符编写一个包装器,这样它不仅会返回类属性的名称,而且还会将它与类名连接起来。

让我们假设一个具有单一属性的类:

Console.WriteLine(nameof(Foo.SomeProperty))现在如果使用(C# 6 or higher)编译,结果将是:

一些财产

所以有可能有这样的东西:

????输入了输入Type,因为我不知道正确的输入Type是什么。

我希望 PrintFullName 的结果是:

Foo.SomeProperty

我不一定要寻找运行时解决方案。任何编译时解决方法也将有所帮助。

0 投票
0 回答
129 浏览

c# - nameOf 运算符和 nameOf 表达式

C# 6中的新增功能一文中的 nameof 表达式部分。在本节中,第一句是文章nameof 运算符的链接(C# 参考)。在第二篇文章中是文章表达式的链接其中是 Nameof 表达式部分。我清楚地理解了 nameof 运算符从获得的参数中产生了什么,但是 nameof 运算符、nameof 表达式和 nameof_expression 之间的关系很混乱。在 Expressions 一文中,第一句话是描述 - 表达式是一系列运算符和操作数。据我了解,nameof 运算符获取符号并提供该符号名称的代码部分是 nameof 表达式。这是正确的还是我误解了什么?nameof_expression 的作用是什么?

0 投票
2 回答
963 浏览

c# - `nameof()` 在当前上下文中不存在?

所以我想做的很简单。

我正在尝试nameof()在一些原始类型上运行 a,因为我需要这些常量来满足特定要求。

但是当我尝试这样做时,例如nameof(bool)它说nameof()在当前上下文中不存在。

这似乎是所有同义词的情况?

有没有其他方法可以做到这一点,或者我错过了什么。

我想做的是

预期结果:

我必须写下所有这些常量吗?

0 投票
2 回答
1469 浏览

asp.net-core - 在 ASP.NET Core 3.x MVC 中使用 nameof() 和 Url.Action() 和异步方法

假设我有一个 ASP.NET Core 3.0 MVC 应用程序,它具有一个简单的控制器,其中包含两个操作并使用基于属性的路由:

因此,调用任一操作应该只生成一个显示这两个操作的 URL 的页面。

打开/home/a1/home/a2正确调用相应的操作,但输出有点出乎意料:

这表明它Url.Action()为第二个动作返回了一个空字符串,而对于第一个动作它工作得很好。

在调试了一段时间后,我发现一篇博客文章将这个问题追踪到 ASP.NET Core 3.0 中的一个重大变化,其中Async后缀不知何故被Url.Action().

作者通过将字符串硬编码为操作名称(在我的情况下为"Action1"und )解决了这个问题。"Action2"他还上传了一些重现此行为的示例代码。

但是,我真的更愿意保留nameof, 以避免以后的重命名/重构问题。

是否有一种干净的方式来使用nameof或其他类型安全的构造来为函数提供带有Async后缀的方法Url.Action