- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在我的项目文件中使用 F# 4.7 和 <LangVersion>preview</LangVersion>
。
我有这样的类型:
type Record = {
Name : string
Description : string
FieldNotInterestedIn: int
}
我想以类型安全的方式获取某些字段的名称,但不是全部。我知道我可以使用反射获取所有字段名称。
let certainFieldNames =
let r = Unchecked.defaultof<Record>
[
nameof r.Name
nameof r.Description
]
最佳答案
特殊函数 nameof
是一个编译时特性,并返回标识符的静态名称。因此,它不能在运行时使用,您的运行时代码将不包含对该函数的任何引用,结果始终是编译时常量。
因此,您不能将它与管道一起使用,也不能作为第一类功能使用。当你尝试它时,你会得到给定的错误。
您编写的代码是最简洁的,因为您似乎想要获得这些标识符的名称。没有句法方法可以动态地执行此操作(除了使用反射,但这是一种完全不同的方法)。
添加这个特殊函数/运算符的主要原因是帮助重命名代码中的操作,或者在 ArgumentNullException
等异常中安全地使用参数的名称。
完整的细节在 RFC 中,特别是“其他注意事项”部分,其中详细说明了您的用例:https://github.com/fsharp/fslang-design/blob/master/preview/FS-1003-nameof-operator.md
在实现中,关于不需要使用 Unchecked.defaultof
的问题进行了长时间的讨论,但是如果不对解析器进行大量重写,我们找不到这样做的好方法。请注意,该代码不会增加运行时开销,而是已删除。
关于reflection - F# nameof 运算符不是一流的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63002244/
我有一个简单的类: public class Stu { public string Name { get; set; } } 如果我这样做: var stu = new Stu(); Con
我发现了一个有趣的包并想在我的 typescript 应用程序中使用它:https://github.com/dsherret/ts-nameof 但是我无法导入nameof 函数。它不在 d.ts
我试图让检查 null 异常更容易,所以我创建了这个静态方法: /// /// Static method for throwing multiple argument null exception
我正在尝试获取通用接口(interface)上方法的名称。我希望它能工作,因为类型部分是一个有效的类型: //This does not compile nameof(IGenericInterfac
所以我想做的很简单。 我正在尝试对某些基本类型运行 nameof(),因为我需要这些常量来满足特定要求。 但是当我尝试为 nameof(bool) 这样做时,它说 nameof() 在当前上下文中不存
目前对于我的 combobox 绑定(bind),我这样写: comboBox1.DataSource = DataList .Select(x => new { Value = x,
使用 Entity Framework ,我有一个名为权限的实体,它有一组 bool s 指定可以做什么和不可以做什么。 有点像: public class Permissions { publ
我正在尝试获取通用接口(interface)上方法的名称。我希望它能工作,因为类型部分是一个有效的类型: //This does not compile nameof(IGenericInterfac
class Foo { public T Bar() { /* ... */ } } 我想将 Bar 的名字传递给 Type.GetMethod(string) .我可以这样做 someType
在 expressions 上使用 nameof 来提取属性名称是个好主意吗? //method with expression protected void RaisePropertyChanged
我正在试验 nameof 和泛型。我没有得到预期的结果。我不确定这是否是规范的一部分。 class MainClass { public static void Main (string[]
我正在使用 VS 2013 和 .Net Framework 4.6。我想使用新的 C# 6 功能(例如 nameof)。但我找不到它。 我应该使用 VS 2015 吗?还是更高的 .Net Fram
在 C# 6 中,您可以使用 nameof()运算符获取包含变量或类型名称的字符串。 这是在编译时评估还是在运行时通过某些 Roslyn API 评估? 最佳答案 是的。 nameof() 在编译时计
我在我的项目文件中使用 F# 4.7 和 preview。 我有这样的类型: type Record = { Name : string Description : string Fiel
nameof(order.User.Age)只返回 Age而不是 order.User.Age 以更受限制的方式进行操作的原因是什么? 如果我们只想要姓氏,我们可以做类似的事情 public stat
我有一个类的多个实例,我想在一个数组中跟踪这些实例,该数组包含我无法控制的此类类型。为此,我创建了一个 List然后我将其与 MyClass[] 中的每个值进行比较我无法控制。 然后,我使用 C#6.
如果我执行 nameof(instance.SomeProperty),它的计算结果为 "SomeProperty"。 有什么方法可以获得整个方法链 "instance.SomeProperty"?
我对 nameof() 运算符有点困惑。因此,例如我不能在另一个类的 nameof() 中使用类的私有(private)字段,但我可以使用 public 非 static 字段 using non s
我想使用下面的 C#6 代码 var joe = new Self(); Console.WriteLine(joe); ...并获得以下输出: joe 下面的尝试 class Self { pu
我现在正在用 C# 创建一个 ConfigurationSection。我决定通过使用 nameof(PropertyName) 而不是硬编码字符串来利用一些 C# 6 功能。 但是,我从 Resha
我是一名优秀的程序员,十分优秀!