DEV Community

Bruce Axtens
Bruce Axtens

Posted on

2 1

Converting C# to VB.Net - Need some help

using System;
using System.Collections.Generic;

namespace PreHOPL
{
    static class Program
    {
        private static readonly Dictionary<string, Tuple<int, Delegate>> dict = new Dictionary<string, Tuple<int, Delegate>>()
        {
            ["SAYLIT"] = new Tuple<int, Delegate>(1, (Action<string>)System.Console.WriteLine),
        };

        private static void Main(string[] args)
        {
            dict["SAYLIT"].Item2.DynamicInvoke("Hello World!");
        }
    }
}
Enter fullscreen mode Exit fullscreen mode

I've just tried 4 diferent online tools (Telerik, ICSharpCode, Carlosag and DeveloperFusion) to convert this to VB.Net for a colleague. Three have spat a long error message and the fourth is spinning its wheels going nowhere. Ideas?

Image of Stellar post

🚀 Stellar Dev Diaries Series: Episode 1 is LIVE!

Ever wondered what it takes to build a web3 startup from scratch? In the Stellar Dev Diaries series, we follow the journey of a team of developers building on the Stellar Network as they go from hackathon win to getting funded and launching on mainnet.

Read more

Top comments (3)

Collapse
 
raphaelgodart profile image
Raphaël Godart • • Edited

First of all, I'm afraid this code is as human readable as it is machine readable. I suggest some refactoring. After 30 minutes, I was able to come up with this translation to VB.Net:

Imports System
Imports System.Collections.Generic

Namespace PreHOPL
    Module Program
        Private ReadOnly dict As Dictionary(Of String, Tuple(Of Integer, Action(Of String))) = New Dictionary(Of String, Tuple(Of Integer, Action(Of String))) From {{"SAYLIT", New Tuple(Of Integer, Action(Of String))(1, CType(AddressOf System.Console.WriteLine, Action(Of String)))}}

        Sub Main()
            dict("SAYLIT").Item2.DynamicInvoke("Hello World!")
        End Sub
    End Module
End Namespace

Collapse
 
bugmagnet profile image
Bruce Axtens •

Thank you for spending so much time on it. I wonder if ValueTuple would simplifying it at all.

Collapse
 
bugmagnet profile image
Bruce Axtens •

Building on @raphaelgodart 's approach and utilising ValueTuple:

Module Module1
    Private Const sSayLit As String = "SAYLIT"
    Private ReadOnly dict As Dictionary(
            Of String, (Arity As Integer, Proc As [Delegate])
        ) = New Dictionary(
            Of String, (Arity As Integer, Proc As [Delegate])
        ) From {
            {sSayLit, (1, CType(AddressOf Console.WriteLine, Action(Of String)))}
        }

    Sub Main()
        dict(sSayLit).Proc.DynamicInvoke("Hello VB.Net World!")
    End Sub

End Module