在C#中,如何为具有多个参数的方法定义换行?

8
在C#中,当我们编写一个方法,该方法需要6个参数,并且我们想要将这些参数分成3行时,我们应该如何进行换行呢?

你的问题是关于换行语法,还是关于在列表中何处进行换行的方法? - David M
在我们想要向方法传递参数时,特别是要换行的语法。 - odiseh
3
我感觉他来自VB编程世界,那里使用下划线“_”来换行。在C#中尝试这样做是行不通的,所以他可能不知道该怎么办。我见过一些从VB转到C#的开发人员也遇到了这个问题。有时候最简单的事情会让人犯错。 - Tomas
8个回答

21

在C#中,你可以在任何参数名称之后(逗号之前或之后)换行。 Stylecop(Microsoft编码风格指南检查器)建议要么所有参数都在同一行上,要么每行一个参数 - 两者之间没有其他选项。像这样:

public void Method(int param1, int param2, int param3, int param4, int param5, int param6)
{

}

public void Method(
    int param1,
    int param2,
    int param3,
    int param4,
    int param5,
    int param6)
{

}

但是,并没有强制要求遵循这些指南,您可以根据自己的内部风格做任何适合您的事情。


3
这是英语中的标准方式。我永远无法理解为什么人们整天阅读英文写作,然后编码时会想出各种不同的格式来组织文本。在很大程度上,遵循英语语言即可。枚举要么都在同一行上完成_This, that, and the other._,要么每个都在新行上(_像项目符号一样_)。函数参数没有理由不遵循该样式。这让我想知道为什么人们要重新设计这些东西。谢谢,你做得很好。 - Pedro Rodrigues
这太完美了,我需要一个能够自动完成这项任务的工具,似乎dotnet format无法胜任。 - Bogdan Mart

14

我猜你只需要简单地添加换行符:

private void SomeMethod(int param1, int param2, 
                        int param3, int param4,
                        int param5, int param6)
{
    // do something
}

在C#中(与VB.NET不同-至少到目前为止;在VS2010中这将发生改变,请查看页面中间的"Implicit Line Continuation"),你可以在代码的任何位置引入换行符。你不需要指定代码语句在下一行继续; 语法会自动处理。

如果你声明了一个像我上面示例的方法,这不会对如何调用它进行任何要求。以下示例都是有效的:

SomeMethod(1, 2, 3, 4, 5, 6);
SomeMethod(1, 2, 3, 4, 5,
    6);
SomeMethod(1
    , 2, 3, 4
    , 5, 6);

你能否扩展你的VB.NET注释,说明在4.0中会有一些东西使得换行符在一般情况下变得不必要(而不仅仅是暗示它)? - Ruben Bartelink

10
您可以使用键盘右侧的ENTER键来换行。这与您在文本编辑器中所做的操作相同。

5
如果他手上有回车键呢?实际上我有一个“Invio”按钮... XD - kentaromiura
1
如果没有不小心偶尔按到那个东西的话,似乎有些人会把整个函数放在一行上... - Nathan Chappell
2
@kentaromiura 谢谢,2023 ENTER 对我没有用,但是 RETURN 有。 - Hanlet Escaño

7
在C#中,您不需要特别指定任何内容来将一行分成几个屏幕行。
因此,在vb中看起来像这样的方法:
sub someMethod(param1 as String, _
    param2 as Integer, _
    param3 as Boolean)

    doSomething()

end sub

在C#中会像这样

public void someMethod(string param1,
    int param2, 
    bool param3) {

    doSomething();
}

6
如果您是指布局方面,有多种选项可供选择,例如:
选项1:
public void Foo(int first, int second,
                int third, int fourth,
                int fifth, int sixth)

选项2:

public void Foo(int first, int second,
    int third, int fourth,
    int fifth, int sixth)

选项三:

public void Foo(
    int first, int second,
    int third, int fourth,
    int fifth, int sixth)

选项4:
public void Foo
    (int first, int second,
     int third, int fourth,
     int fifth, int sixth)

个人而言,我喜欢选项1,但它有两个缺点:

  • 如果您更改方法名称,则需要重新排列参数
  • 每行的空间不足,因为它已经缩进了相当远的距离

如果无法实现选项1,我通常会选择选项2或3。对我来说,选项4看起来相当丑陋。


@Ruben:我已经删除了我的评论。请随意添加新的评论 :) - Jon Skeet

2

你的意思是这样的吗?

public void MyMethod(int Parameter1, string Parameter2
                   , long Parameter3, float Parameter4
                   , double Parameter5, char Parameter6)
{
    //Method Functionality
}

2
public void Foo(object Parameter0, object Parameter1,
    object Parameter2, object Parameter3,
    object Parameter4, object Parameter5)
{
    //do stuff
}

6个参数 / 3行 = 每行2个参数?虽然看起来有点奇怪,因为每行都有多余的空间。

请注意,在C#中,您只需使用换行符即可 - 不需要任何花哨的东西(例如VB的“_”)。


1

如果我理解你的意思是这样的话,那么...

public void myMethod ( type parameter1, 
                       type parameter2,
                       .
                       .
                       type parameterN) 
{
     .
     .
     .
}  

将-1变为0:希望在三行内完成。其他答案更清晰并解释了原因,而不仅仅是给出答案。 - Ruben Bartelink

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接