c# - 是否可以创建变体值类型?

标签 c# variant

论文Valued Conversions Kevlin Henney 提供了所谓的变量值类型功能的动机,以及 C++ 实现的大纲。这是一本很好的读物,它涵盖了我希望在 C# 中可用的内容:一种可以保存不同值的通用类型 value-types .

虽然我在 C# 中找不到类似的东西。 SO 上有些类似的问题有不令人满意的答案和评论,如“这可能不是你想要的”。这让我感到惊讶,因为它看起来像是相当普遍需要的功能。 Henney 的 C++ boost::any类被广泛使用。

是否无法在 C# 中创建此功能?


编辑:针对其中一个答案,我不认为泛型可以解决问题。使用泛型需要开发人员知道 Variant 变量持有哪种类型的值,并且该类型对于特定的 Variant 变量也是不可变的。但是我说的 Variant 类型应该可以容纳不同的类型。例如,函数 Variant ReadValue() 可以从文件中读取一个条目,解析它,相应地填充 Variant 值,然后返回它。调用者事先并不知道返回的Variant中会包含什么样的类型。

最佳答案

这就是泛型的用途。 List<T>其中 T是任何东西。泛型同时提供编译时和运行时类型安全。

您可以创建自己的通用类型来存储您想要的任何值。您也可以将任何内容转换为 object并原样传递。

你也可以使用泛型约束来限制你的类型,比如想要只有T是一个引用类型:

public MyClass<T> where T : class

或者一个值类型:

public MyClass<T> where T : struct

在这里查看更多信息:http://msdn.microsoft.com/en-us/library/d5x73970.aspx

关于c# - 是否可以创建变体值类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21390003/

相关文章:

c++ - boost::static_visitor 中 operator() 的附加参数

C++ boost变体问题

graphql - Shopify 店面 API : Getting referenced variant with GraphQL

c# - 在 C# 准备语句中执行多个 SQL 查询

c# - 离线复制数据库模式

c# - 如何在数据列表中获取链接按钮文本和值?

excel - 为什么粘贴变体值时我检索器编号而不是文本?

c# - Windows Azure - 无法创建角色入口点

javascript - 由于下拉列表的选定索引更改而发生回发时,标签不会保留其文本

delphi - 如何正确设置变体发布的属性