dotnet/roslyn

Clarify diagnostic when constant pattern has non-constant conversion to input type

Closed

#63,476 opened on Aug 18, 2022

 (1 comment) (0 reactions) (0 assignees)C# (4,257 forks)batch import
Area-CompilersBugConcept-Diagnostic Clarityhelp wanted

Repository metrics

Stars
 (20,414 stars)
PR merge metrics
 (Avg merge 6d 17h) (256 merged PRs in 30d)

Description

The error given for the below scenario could be made more clear: it is not the string literal itself which is the problem, it is the conversion to the switch input type which makes it a problem. SharpLab.

Discussed in https://github.com/dotnet/roslyn/discussions/63400

Originally posted by zms9110750 August 15, 2022

foreach (var ele in XElement.Load("D:\\temp.xml").Nodes())
{
	switch (ele)
	{
		case XElement xel:
			const string br = "br";
			Console.WriteLine(xel.Name switch
			{
				"br" => "\n", //CS0150
				br => "\n",	  //CS0150
				S.br => "\n", //CS0150
			});
			break;

		case XText txt:
			Console.WriteLine(txt);
			break;
	}
}
static class S
{
	public const string br = "br";
}

Why does pattern matching not treat strings as constants

Contributor guide