问题标签 [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.
.net - 使用 System.ValueTuple 时编译失败
- VS 2017 版本 15.3.2
- 项目目标框架 4.6.2
- 安装 nuget 包 System.ValueTuple 最新稳定版 4.4.0
- 使用值元组,编辑器中没有显示错误
- 运行编译步骤,错误窗口中没有错误,只有输出窗口显示编译失败和实际错误消息
类、结构或接口成员声明中的标记“(”无效
到底是怎么回事?
我从这个分支在 git 中创建了一个分支,一切正常。我将更改合并回来,编译失败。我尝试卸载软件包并重新安装,同样的事情。
c# - 具有一次性成员的 C# ValueTuple
假设我有一个方法foo
返回一个ValueTuple
其中一个成员是一次性的,例如(IDisposable, int)
.
确保在调用方正确处理返回的一次性对象的最佳方法是什么?
我尝试了以下方法:
但这不会编译:
'(IDisposable 一次性,int number)':在 using 语句中使用的类型必须隐式转换为 'System.IDisposable'
我真的需要将我的代码包装在一个 try-finally 块中并在 finally 块中显式地处理我的对象,还是有更好的方法来做到这一点?
实际上,我希望看到新的 ValueTuples 实现IDisposable
接口并调用Dispose()
它们所有的一次性成员。这对微软来说是一个有价值的功能请求吗?
c# - 通用引用相等比较器不适用于 ValueTuple
我编写了一个通用的相等比较器,无论参数类型的GetHashCode
和Equals
方法看起来如何,它都应该通过引用进行比较:
我像这样扔了一个ValueTuple
(在这种情况下是一对object
s):
但是这个比较器的行为并不像预期的那样,所以我想我做错了什么。要查看问题所在,首先考虑以下情况:
由于没有比较器作为 的输入HashSet
,因此将使用默认比较器。这意味着,两者都Item1
将Item2
使用引用相等和默认哈希码(地址或其他东西)。输出是我所期望的。
但如果我改为使用比较器
然后输出改变:
但他们应该以同样的方式行事!他们为什么不呢?和,不ReferenceEquals
一样吗_ _ _ _ 和类似的?object.Equals
ReferenceEquals
(object,object)
ReferenceEquals
Item1
Item2
&&
GetHashCode
c# - C# ValueTuple 属性命名
我正在 C# 中尝试 ValueTuple 类,我对属性命名有疑问,让我们看看:
如果实例化一个声明对象的 ValueTuple,如下所示:var tuple1 = (Name: "Name1", Age: 25);
我们可以命名属性,
但是,像这样:ValueTuple<string,int> tuple2 = (Name: "Name1", Age: 25);
我们收到一条警告说名称被忽略,所以
我们应该输入:ValueTuple<string,int> tuple2 = ("Name1",25);
那么属性将是tuple2.Item1
和tuple2.Item2
有人可以解释这个新手的原因吗?
比你更有优势
c# - 检测对象是否为 ValueTuple
我有一个用例,我需要检查一个值是否是 C# 7 ValueTuple,如果是,则遍历每个项目。我尝试检查,obj is ValueTuple
但obj is (object, object)
两者都返回错误。我发现我可以使用obj.GetType().Name
并检查它是否以开头,"ValueTuple"
但这对我来说似乎很蹩脚。欢迎任何替代方案。
我也有获取每个项目的问题。我试图Item1
使用此处找到的解决方案:如何检查属性是否存在于 c# 中的动态匿名类型上?但((dynamic)obj).GetType().GetProperty("Item1")
返回空值。我希望然后我可以做一个while
来获得每件物品。但这不起作用。我怎样才能得到每件物品?
更新 - 更多代码
c# - System.ValueTuple 的排序顺序是官方指定的,在哪里?
C# 7 中的新ValueTuple
类型实现了 ,但我能找到的关于其实现IComparable
的唯一文档CompareTo
只是说明' 的返回值表示“按排序顺序”的相对位置。它没有说明实际上所指的“排序顺序”是什么。
通过检查源,我可以发现顺序是我所期望的 - 它委托比较第一个字段的默认值Comparer
,然后一次使用其他字段,以便打破平局。但是,我不希望在不保证它不被视为可以在不违反规范的情况下更改的实现细节的情况下依赖它。
这种行为实际上是否记录在任何地方?
c# - 我可以将 ValueTuple 传递给需要泛型类型并仍维护成员变量的方法吗?
以下只是关于语言本身的问题,我在发布更好的代码架构方法之前开始考虑这个问题,但这让我很感兴趣。
如果我有这种结构的方法
在不同的类和方法中,我有一个变量
在这个变量的范围内,我可以做类似的事情
无论如何我可以传递myTuple
给Foo
哪个可以维护元组中元素的命名,以便我可以做类似的事情bar.firstValue
?
python - 如何遍历元组列表,将一个列表中的元组与同一列表中的其他元组进行比较?
我基本上想检查每个列表(在列表“检查”中)是否存在相同的元组,例如 (1, 3) 和 (3, 1)。然后我想从列表“检查”中删除最后一个((3,1))。但是,当我使用“check.remove(x)”时,该函数返回“list.remove(x): x not in list”错误。当我使用“check.remove(y)”时,结果是:
我注意到第一个元组(具有相同值的元组)被删除了,并且在倒数第二个列表中,仍然有一对具有相同值的元组。
如何比较同一列表中的元组并删除包含相同值的第二个?
c# - 如何动态迭代/检测具有空成员的 ValueTuple 中的成员类型?
我正在尝试使用在泛型方法的参数列表ValueTuple
中简洁地输入N
类型列表,然后再迭代该类型列表。
但是,我在迭代类型时遇到了问题,因为初始Tuple
有null
成员,所以调用.GetType()
会给我一个 NullReferenceException。
我意识到我可以使用 Type 对象的实际列表来做我需要的事情,但我更喜欢创建元组时允许的非常简洁的语法......当然因为这样的事情让我很感兴趣 :)
用法