M (1, c : 2, b : 3, 4); // Error
В этой строке выдается ошибка, так как число 4 используется в качестве позиционного параметра и имеет после именованного параметра c, который не находится в этой позиции.Если эта строка кода будет введена в редакторе Visual Studio как часть кода ниже
namespace OptionalAndNamedParameters
{
class Program
{
static void Main(string[] args)
{
//M(1, b: 2, 3, 4);
//M(1, b: 2, c: 3, 4);
M(1, c: 2, b: 3, 4);//red squiggly line under 'c' and error
}
private static void M(int a, int b, int c, int d)
{
Console.WriteLine(a+b+c+d);
}
}
}
под c: вы увидите красную волнистую линию и, если вы поместите здесь курсор мыши, вы увидите примечание:Именованный аргумент 'c' используется вне позиции, но за ним следует безымянный аргумент.если до 4 вы добавите d: и строка анализируемого кода станет
M(1, c: 2, b: 3, d:4);//correct code line without red squiggly line and error
, красная волнистая линия исчезнет, а код будет выполнен без ошибок и получит вывод 10.
В Microsoftдокументация, https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/named-and-optional-arguments - это объяснение именованных аргументов:
начиная с C # 7.2, они используются в правильном положении.В приведенном ниже примере параметр orderNum находится в правильной позиции, но не имеет явного имени.
PrintOrderDetails(sellerName: "Gift Shop", 31, productName: "Red Mug");
Однако аргументы с неупорядоченным именем недопустимы, если ониследуют позиционные аргументы.
В соответствии с этим объяснением, как я понимаю, если для номера 1 будет присвоено имя a и строка кода станет:
M(a:1, c: 2, b: 3, 4); //red squiggly line under 'c' and error
Должно работать, но в редакторе Visual Studio,в этом случае появится красная волнистая линия под буквой c, и также будет выдана ошибка.Такая же ситуация будет и для строки
M(d:1, c: 2, b: 3, 4); //red squiggly line under 'c' and error
. Это означает, что когда вы изменяете положение некоторого параметра, присваивая ему имя, все параметры, которые будут следовать после него, также должны быть названы.