是否存在使用 C# 动态调度的 VB“变体”实现之类的东西

本文关键字:实现 变体 VB 存在 是否 动态调度 | 更新日期: 2023-09-27 18:35:27

我意识到它违背了C#的强类型性质,但我发现在使用该语言中的动态对象时,JavaScript或PowerShell中通常发现的一些更有用的功能根本不实用。

例如,以下 C# 代码将在运行时失败,原因显而易见。

dynamic x = 1.0;
int y = x;

但是,这使得 C# 的动态功能在处理松散类型数据(例如由 JSON 有效负载或 CSV 生成的数据)时非常有限,其中表示形式的细微变化可能会导致运行时的行为非常不同。

我正在寻找的是行为与VBA/VBScript时代Variant类型非常相似的东西。我想可以从DynamicObject派生出这样一个类型,它将包装原始值,如Int32String等,并在运行时执行适当的强制转换。我已经在动态上下文中对"null"值做了类似的事情。

但是有没有这样的事情已经建立起来了?我环顾了GitHub或Codeplex,但无济于事,但这是一件很难搜索的事情。在我开始我想象的将是一个相当复杂的课程之前,我想确保我没有浪费我的时间。

关于所有这些的实用性

应该指出,我长期以来一直抵制 C# 中的动态调度概念,因为它并不打算成为一种动态语言。老实说,我希望它根本没有添加到语言中,或者至少仅限于 COM 互操作方案。

但话虽如此,我总是很好奇如何"破解"语言功能,让他们做他们从未打算做的事情。有时从中会产生一些有用的东西。例如,有很多人使用 IDisposable 接口和 using 语句来做与释放资源无关的事情的例子。

我怀疑我会在生产应用程序或任何需要移交给其他开发人员的东西中使用它。

是否存在使用 C# 动态调度的 VB“变体”实现之类的东西

Visual Basic 语言隐藏了很多胶水,这不是 C# 的方式。 Variant 类型具有大量转换函数,它们由 vb 运行时自动调用。 .NET 也有自动转换功能,您只需明确使用它们:

dynamic x = 1.0;
int y = Convert.Int32(x);

C#必须编写这样的代码的理由是因为它不是一种隐藏成本的语言。