【发布时间】:2022-11-21 22:30:15
【问题描述】:
在 C++ 中,我们有 std::variant 用于创建 sum-types。
例如,以下将允许v持有std::string或int:
#include <variant>
#include <string>
//...
std::variant< std::string, int> v;
v = "aaa"; // now v holds a std::string
v = 5; // now v holds an int
此外 - 编译器将强制您分配给 v 的值只能转换为 std::string 或 int。
我正在寻找 C# 中的类似结构。
看过这篇文章:Variant Type in C#,
但它没有提供我正在寻找的合适的等价物。
C#里有吗?
【问题讨论】:
-
那将是
object。最终 C# 可能会得到一个 discriminated union。 -
但是
object可以容纳任何类型,不是吗?如果是这样的话,它不是像std::variant这样的真实总和类型的好替代品。 -
object是你目前所拥有的(我不认为dynamic会做你想做的事)