Hacktoberfest 2026: as issues que os mantenedores marcaram para outubro, abertas e boas para iniciantes. Ver issues do Hacktoberfest

VB -> C#: Switch on Object type results in behaviour change when cases are a different type

Aberta
#951 1 comentário 0 reações 0 responsáveis Ver no GitHub

Ninguém assumiu esta issue ainda.

Avaliação

Dificuldade
4/5
Tempo estimado
3-5 dias
Facilidade para iniciantes
35/100
Tipo de issue
Bug
Clareza
Razoavelmente clara
Status de atividade
Estagnada
Stack de tecnologia
csharp
Domínio
tooling

Direção de pesquisa

Reproduza o exemplo de VB.NET por meio do conversor e inspecione o ponto de entrada da conversão de Select Case-to-switch. Compare o comportamento quando o seletor é Object e os valores de case têm outro tipo, depois adicione cobertura para a entrada mostrada e o comportamento esperado de C#. Está concluído quando o código convertido preserva o resultado da correspondência do VB.NET e os testes de conversão existentes continuam passando.

Escrita pelo modelo de indexação a partir do texto da issue.

Descrição

VB -> C#
VB.Net input code
Public Class VisualBasicClass
    Sub Main()

        Dim StrObject As Object = "10"

        Select Case StrObject
            Case 10
                Console.WriteLine("Ten")
            Case 20
                Console.WriteLine("Twenty")
            Case Else
                Console.WriteLine("Else")
        End Select

        Console.ReadLine()

    End Sub
End Class

Output: Ten

Erroneous output
public partial class VisualBasicClass
{
    public void Main()
    {

        object StrObject = "10";

        switch (StrObject)
        {
            case 10:
                {
                    Console.WriteLine("Ten");
                    break;
                }
            case 20:
                {
                    Console.WriteLine("Twenty");
                    break;
                }

            default:
                {
                    Console.WriteLine("Else");
                    break;
                }
        }

        Console.ReadLine();

    }
}

Output: Else

Expected output

Looks pretty gross, but maybe something like this:

public partial class VisualBasicClass
{
    public void Main()
    {

        object StrObject = "10";

        switch (StrObject)
        {
            case var @case when Operators.ConditionalCompareObjectEqual(StrObject, 10, false):
                {
                    Console.WriteLine("Ten");
                    break;
                }
            case var @case when Operators.ConditionalCompareObjectEqual(StrObject, 20, false):
                {
                    Console.WriteLine("Twenty");
                    break;
                }

            default:
                {
                    Console.WriteLine("Else");
                    break;
                }
        }

        Console.ReadLine();

    }
}

Output: Ten

Details
  • Product in use: both
  • Version in use: VS Extension Version 9.0.4.0 / Website latest
  • Did you see it working in a previous version, which? No
  • Any other relevant information to the issue, or your interest in contributing a fix.
Linguagem predominante
C#
Estrelas
913
Forks
244
Métricas de merge de PRs
Nenhum PR com merge em 30d

Preparar o ambiente

Primeiros passos

  1. Leia a issue inteira e depois o guia de contribuição do projeto.
  2. Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
  3. Faça um fork do repositório e trabalhe em uma branch.
  4. Abra um pull request que referencie o número da issue.

Mais de icsharpcode/CodeConverter

Todas as issues de icsharpcode/CodeConverter

Issues semelhantes

Mais issues de C#

Receba novas issues na sua caixa de entrada

Um resumo curto de issues do GitHub para quem está começando.