How to specify default values ​​for method parameters in C # 7 tuples?

In C #, you can define default options as described here . I played with tuples and C # 7 (using LinqPad beta ) as follows:

void Main()
{   
    var result=AddTuples((1,2), (3,4));
    Console.WriteLine($"Result is: {result}");
}

(int x, int y) AddTuples((int x, int y) a, (int x, int y) b)
{
    return (a.x+b.x, a.y+b.y);
}

This works fine, it shows the sum of a and b:

Result: (4, 6)

Now I tried to change AddTuplesto have default options, but for some reason I could not figure out how to do this. What I tried is something like:

(int x, int y) AddTuples2((int x, int y) a = (0,0), (int x, int y) b=(0,0))
{
    return (a.x + b.x, a.y + b.y);
}

But I get an error message:

CS1736 The default parameter value for 'a' must be a compile-time constant

CS1736 The default parameter value for 'b' must be a compile time constant

What am I doing wrong?


Update

, . : , 3 :

. 1., 2. 4. , 3. , default.

+9
3

a b . , ( ), , .

, , .

, , :

(int x, int y) AddTuples2((int x, int y)? a = null, (int x, int y)? b = null)
{
    (int x, int y) aNN = a ?? (0,0);
    (int x, int y) bNN = b ?? (0,0);
    return (aNN.x + bNN.x, aNN.y + bNN.y);
}
+5

, int :

public static (int x, int y) AddTuples(
    (int x, int y) a = default((int, int)), 
    (int x, int y) b = default((int, int)))
{
    return (a.x + b.x, a.y + b.y);
}

, .

( (0, 0)) .


[]

params:

public static (int x, int y) AddTuples(params (int x, int y)[] tuples)
{
    return (tuples.Sum(t => t.x), tuples.Sum(t => t.y));
}

:

Console.WriteLine($"Result is: {AddTuples()}");                       // (0, 0)
Console.WriteLine($"Result is: {AddTuples((1, 1))}");                 // (1, 1)
Console.WriteLine($"Result is: {AddTuples((1, 1), (2, 2))}");         // (3, 3)
Console.WriteLine($"Result is: {AddTuples((1, 1), (2, 2), (3, 3))}"); // (6, 6)
+6

VisualStudio 2017 suggested the following Patrick's answer:

(int x, int y) AddTuples2((int x, int y)? a = null, (int u, int v)? b = null)
{
    (int x, int y) = a ?? (0,0);
    (int u, int v) = b ?? (0,0);
    return (x + u, y + v);
}
+1
source

Source: https://habr.com/ru/post/1014488/


All Articles