【问题标题】:use Dynamic variable to create a tuple-like variable使用动态变量创建一个类似元组的变量
【发布时间】:2023-03-20 20:37:01
【问题描述】:

我正在尝试使用dynamic 变量创建一个类似元组的变量,但我不知道如何。

这是我尝试使用 dynamic 变量重新创建的代码

var mustEncodeDict = new Dictionary<string, (bool doubleQ, int maxEnc)>();

mustEncodeDict.Add("test1", (true, 3));
mustEncodeDict.Add("test2", (true, 3));
mustEncodeDict.Add("test3", (true, 3));
mustEncodeDict.Add("test4", (false, 3));
mustEncodeDict.Add("test5", (true, 3));

我正在尝试使用dynamic 变量而不是元组,因为我想让代码与 C# 5 兼容,我知道这个原因听起来很傻。

感谢任何帮助。

【问题讨论】:

  • 嗨 @GetRektBoy724 欢迎来到 Stack Overflow。也许看看Tuple.Create()。这是你想要达到的目标吗?
  • 为什么必须使用dynamic?为什么不是struct
  • 如果你真的想使用dynamic,也许像var mustEncodeDict = new Dictionary&lt;string, dynamic&gt;(); mustEncodeDict.Add("test1", new{ doubleQ = true, maxEnc = 3 }); Console.WriteLine(mustEncodeDict["test1"].doubleQ);这样的东西
  • 您不能使用dynamic 创建变量。 dynamic 所做的只是将编译推迟到运行时,根据运行时类型而不是编译时类型解析成员名称。所以无论你的XY Problem 在这里,dynamic 都不是前进的道路。
  • 谢谢@Jimi,让我测试一下

标签: c# .net tuples c#-5.0


【解决方案1】:

Tuple 数据结构早在很久以前就存在了,所以即使你的目标是 .net Framework 4 (C# 4.0),你也应该很好。

后面只介绍了新的 nice 语法和作为值类型的重新实现。

说:

var mustEncodeDict = new Dictionary<string, Tuple<bool, int>>();
mustEncodeDict.Add("test1", Tuple.Create(true, 3));

【讨论】:

  • Ahh lmao idk about this,我很讨厌 C#.thx 的回答,但我得到了它与 dynamic 的合作 :)
【解决方案2】:

值元组的名称是编译器构造,它们不是元组的一部分,而是附加到值上。

查看https://sharplab.io/ 中的代码,了解幕后情况。

如果您希望您的代码在不同的运行时或语言(或语言版本)之间可互操作,您应该为此创建一个类。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-06-08
    • 1970-01-01
    • 2022-11-02
    • 2020-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多