问题标签 [valuetuple]
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.
c# - 无法加载文件或程序集“System.ValueTuple”
我有一个 VS2017 项目,它编译为一个 DLL,然后由其他人编写的 EXE 调用。这两个项目都针对 .Net Framework 4.6.2。我重写了我的一个 DLL 方法以返回一个元组,并导入了关联的 NuGet 包。当我编译项目时,它在输出目录中包含 System.ValueTuple.dll,然后将其部署到我的 DLL 加载并由 EXE 调用的其他机器。但是当 EXE 尝试调用返回元组的方法时,它会崩溃:
意外错误无法加载文件或程序集“System.ValueTuple,Version=4.0.1.0,Culture=neutral,PublicKeyToken=cc7b13ffcd2ddd51”或其依赖项之一。该系统找不到指定的文件。
我不明白为什么它没有找到该文件,因为它与我的 DLL 位于同一文件夹中。显然 MS 没有在 .Net Framework 4.6.2 中包含这个程序集。
请注意,我的 DLL 是使用 machine.config 文件在 Windows 中注册的。我猜如果我也将 System.ValueTuple.dll 添加到这个文件中它会起作用(还没有尝试过,不确定这是最好的方法,尤其是长期的。)除了等待 4.6 之外,还有更好的方法吗.3 并希望它包括这个组件?
c# - C# 7 中由 ValueTuple 命名的 KeyValuePair
C# 7.0(在 VS 2017 中)中的新功能是否可以将元组字段名称转换为 KeyValuePairs?
假设我有这个:
做这样的事情会很好:
我已经添加System.ValueTuple
到项目中。
能这样写会比这种传统风格好很多:
c# - 使用 Microsoft Fakes 对 ValueTuple 进行单元测试
我正在尝试使用 ValueTuples (当前的 NuGet 包),虽然我需要它的大多数东西都是无缝的,但在尝试对与继承相关的某些场景进行单元测试时出现了问题。我做了一个简单的接口/实现测试,任何人都可以重复,这对于虚拟/覆盖示例也失败了。
首先创建一个简单的控制台项目和一个简单的单元测试并将两者链接起来。然后为主项目创建一个 Fakes (Microsoft.QualityToole.Testing.Fakes) 对象。创建以下类。
这可以在不需要实现接口的情况下得到证明,因为在构建假货时,接口本身无法编译。
构建解决方案会产生此错误:
- 严重性:错误
- 代码:CS8141
- 说明:方法“StubIModelClass.IModelClass.Run()”签名中的元组元素名称必须与接口方法“IModelClass.Run()”的元组元素名称匹配(包括返回类型)。
该错误源于 fakes 构建目录中的 f.cs 文件,因为它将 Run() 方法存根实现为:
返回签名与接口上命名的 ValueTuple 的签名不匹配。如果我们删除命名并在所有构建的所有地方都使用 (string, int),但是您会受到简单元组和 Item1、Item2 的限制……这似乎违背了 ValueTuple 的目的。
经过大量搜索后,我最终来到这里,询问是否有人能够通过在 UnitTests 上工作的 ValueTuple 获得继承,如果没有,您除了求助于什么解决方案
- 删除单元测试
- 将 TupleValue 转换为类
- 使用简单的元组
如果可能的话,我想避免这些。
c# - 我无法通过 c# 7.0 中的反射从 valuetuple 获取参数名称
我想使用反射将 ValueTuple 映射到一个类。文档说有一个附加到 ValueTuple 的属性,带有参数名称(除了 Item1、Item2 等......),但我看不到任何属性。
反汇编什么也没显示。
发生什么事?
例子:
通过反射无法得到Item1、Item2的名称来通过反射与T字段匹配。
sonarqube - 似乎值元组正在破坏 SonarC# 代码分析器
我正在尝试使用新的 ValueTuple 语言功能。虽然它在构建和测试中运行良好,但当 SonarC# 尝试分析代码时,我收到以下错误:
我正在使用以下代码作为测试:
c# - ValueTuple 结构是否只能作为变量可变?
我玩弄了这个ValueTuple
结构并尝试实现一个不可变的复合键。键由值类型组成。
我试图通过一些单元测试来打破以下实现,但到目前为止没有成功。我错过了什么吗?
这也只是出于好奇,我想在ValueTuple
.NET 4.7 发布之前了解 s 和它的限制。
到目前为止,我对 a 的理解ValueTuple
是,它仅作为变量是可变的,而不是作为字段或属性。不过,不确定“可变”在这里是什么意思。更改ValueTuple
实例是否实际上会创建一个新实例ValueTuple
(就像众所周知的字符串是“不可变的”但实际上是引用类型)?
从这个答案
System.ValueTuple
不仅是 astruct
,它还是一个可变的,并且在使用它们时必须小心。想想当一个类将 aSystem.ValueTuple
作为一个字段时会发生什么。
这是我的实现和测试
错误:无法修改“ImmutableKey.Key”的返回值,因为它不是变量
c# - C#7 值元组/解构不对称
给定一个函数(string a, string b) F()
,你可以解构它返回的元组:
或者你可以分配它:
类解构器的行为类似于第一种情况。C
给定一个类Deconstructor(out string a, out string b)
:
但是编译器不会使用解构函数将其隐式转换为元组:
显然,您可以基于解构器机械地编写隐式转换:
尽管解构和赋值情况之间的语法在视觉上相似,但将引用分配给元组与将类解构为变量然后将它们放入新元组中是不同的。但是,您可以隐式转换(int x, int y)
为(double x, double y)
. 值元组是一种语法糖特性,它做它看起来做的事情,而不在乎实现细节。
如果我想到了这一点,C# 团队也想到了,如果他们选择不为隐式转换添加“魔法”支持,他们有充分的理由1。
为什么自动进行隐式转换不是一个好主意,有什么积极的理由吗?
或者它是那些被认为价值不足以证明成本合理的功能之一?
这是该小提琴的代码:
1 C# 团队可能并不比每个人都聪明,但我从来没有输过赌他们至少和我一样聪明。
c# - 将 ValueTuple 转换为 IEnumerable
有没有更明智的方法来执行以下操作:
编辑:因为人们要求一个用例,所以你去。