6 Replace the string array by array of nullable int (-2 characters): **new int?[++n]** add-return adds to the fancyness ^^
source | link

C# (.NET Core), 73 69 66 64 62 bytes

 

Two less bytes and perl-like appearance thanks to Barodus. Didn't think of using int? for nulls.

n=>$@"  ^
 / {string.Join(@"\
| | |
 \ ",new int?[++n])}/
  v"

Try it online!Try it online!

C# (.NET Core), 73 69 66 64 62 bytes

 
n=>$@"  ^
 / {string.Join(@"\
| | |
 \ ",new int?[++n])}/
  v"

Try it online!

C# (.NET Core), 73 69 66 64 62 bytes

Two less bytes and perl-like appearance thanks to Barodus. Didn't think of using int? for nulls.

n=>$@"  ^
 / {string.Join(@"\
| | |
 \ ",new int?[++n])}/
  v"

Try it online!

5 Replace the string array by array of nullable int (-2 characters): **new int?[++n]** add-return adds to the fancyness ^^
source | link

C# (.NET Core), 73 69 66 6464 62 bytes

n=>$@"  ^
 / {string.Join(@"\
| | |
 \ ",new string[n+1]int?[++n])}/
  v"

Try it online!

C# (.NET Core), 73 69 66 64 bytes

n=>$@"  ^
 / {string.Join(@"\
| | |
 \ ",new string[n+1])}/
  v"

Try it online!

C# (.NET Core), 73 69 66 64 62 bytes

n=>$@"  ^
 / {string.Join(@"\
| | |
 \ ",new int?[++n])}/
  v"

Try it online!

4 deleted 50 characters in body
source | link

C# (.NET Core), 73 69 6666 64 bytes

Used verbatim (@"") strings to save on escape sequences.

 
n=>@"n=>$@"  ^
 / "+string{string.Join(@"\
| | |
 \ ",new string[n+1])+@"}/
  v"

Try it online!Try it online!

C# (.NET Core), 73 69 66 bytes

Used verbatim (@"") strings to save on escape sequences.

n=>@"  ^
 / "+string.Join(@"\
| | |
 \ ",new string[n+1])+@"/
  v"

Try it online!

C# (.NET Core), 73 69 66 64 bytes

 
n=>$@"  ^
 / {string.Join(@"\
| | |
 \ ",new string[n+1])}/
  v"

Try it online!

3 added 48 characters in body
source | link
2 deleted 61 characters in body
source | link
1
source | link