English 中文(简体)
使用 C# 动态发送的 VB “ 变式” 执行是否存在?
原标题:Does something like a VB "Variant" implementation exist which uses C# s dynamic dispatch?

我意识到这与C#的强烈打字性质相悖, 但我发现在使用语言中的动态物体时, JavaScript 或 PowerShell 通常发现的一些更有用的功能根本不实用。

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

dynamic x = 1.0;
int y = x;

但这就使得C#的动态特征在处理诸如JSON有效载荷或CSV产生的松散打字数据时非常有限,在这些数据中,表达方式的细微变化可能导致运行时的行为非常不同。

我所寻找的是类似 VBA / VBScript 时代 < code> Varient type。 我想可以从 DynamicObject 中得出这样的类型,将原始值包起来,如 Int32 , String 等,并在运行时进行适当的投影 。 我在动态环境中用“null”值做了类似 的东西。

但是,有没有类似的东西已经建立?我环顾GitHub或Cocplex,毫无用处,但很难寻找。在我开始研究我所想象的将是一个相当复杂的班级之前,我想确保我没有浪费我的时间。

About the practicality of all of this

我要指出的是,我长期抵制C#中的动态发送概念,因为其本意不是要成为动态语言。 坦率地说,我希望它不会被添加到语言中,或者至少局限于COM对接情景中。

但话虽如此,我总是好奇用什么方法“隐藏”语言特征,让他们做他们从未打算做的事情。有时有些有用的东西会从中产生出来。例如,有很多例子说明人们使用IDisposable 接口和 语句来做与释放资源无关的事情。

我怀疑我会用它来生产 应用或任何需要 交给另一个开发商的东西。

问题回答

视觉基本语言隐藏了很多胶水, 这绝不是 C# 方式。 变式类型具有一系列转换功能, 它们被 vb 运行时间自动引用 。. NET 也有自动转换功能, 您只需明确使用它们 :

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

使用 C # 来解释为何必须写出这样的代码, 因为它不是隐藏成本的语言 。





相关问题
Anyone feel like passing it forward?

I m the only developer in my company, and am getting along well as an autodidact, but I know I m missing out on the education one gets from working with and having code reviewed by more senior devs. ...

NSArray s, Primitive types and Boxing Oh My!

I m pretty new to the Objective-C world and I have a long history with .net/C# so naturally I m inclined to use my C# wits. Now here s the question: I feel really inclined to create some type of ...

C# Marshal / Pinvoke CBitmap?

I cannot figure out how to marshal a C++ CBitmap to a C# Bitmap or Image class. My import looks like this: [DllImport(@"test.dll", CharSet = CharSet.Unicode)] public static extern IntPtr ...

How to Use Ghostscript DLL to convert PDF to PDF/A

How to user GhostScript DLL to convert PDF to PDF/A. I know I kind of have to call the exported function of gsdll32.dll whose name is gsapi_init_with_args, but how do i pass the right arguments? BTW, ...

Linqy no matchy

Maybe it s something I m doing wrong. I m just learning Linq because I m bored. And so far so good. I made a little program and it basically just outputs all matches (foreach) into a label control. ...