5

我在这里做了一些搜索,我很惊讶没有人问过这个问题。Visual Studio 2010 的 VB 智能缩进对于多行语句是否严重损坏?还是我做/设置不正确?我将其设置为 4 个字符的缩进并带有制表符。在 VB 中键入具有自然返回的多行语句会产生以下结果(更改了属性名称以保护无辜者)。

Public Sub Sub1()
    Dim foo As New MyClassA With {.FileName = "test", 
                                  .Format = MyEnumForImageFormat.jpg,
                                            .IsReallySpecial = False,
                                                        .Name = "testN",
                                                                    .SourceId = Guid.NewGuid(),
                                                                    .VariantName = "TestV",
                                                                    .Width = 800,
                                                                    .Height = 600}
End Sub

怎么会有人想以这种方式格式化他们的代码?我想,也许我需要重新格式化(Ctrl+K Ctrl+D):

Public Sub Sub1()
    Dim foo As New ImageBase With {.FileName = "test",
              .Format = MyEnumForImageFormat.jpg,
                 .IsReallySpecial = False,
                    .Name = "testN",
                       .SourceId = Guid.NewGuid(),
                       .VariantName = "TestV",
                       .Width = 800,
                       .Height = 600}
End Sub

为了更好地衡量,我再次尝试重新格式化。瞧,它把它推得更远了。我又推了一下,它又动了一些。最后,经过四次重新格式化,我的代码如下所示:

Public Sub Sub1()
    Dim foo As New ImageBase With {.FileName = "test",
     .Format = MyEnumForImageFormat.jpg,
     .IsReallySpecial = False,
     .Name = "testN",
     .SourceId = Guid.NewGuid(),
     .VariantName = "TestV",
     .Width = 800,
     .Height = 600}
End Sub

更好,但我们真的想要只缩进一个空格的连续行吗?为什么我必须重新格式化四次才能得到我想要的?最重要的是,尝试在上面再添加一个属性定义不会保持任何对齐 - 默认缩进是通过随机确定数量的空格和制表符将偏移量级联到右侧。

使用旧式延续字符没有帮助。我怎样才能有任何程度的理智的智能缩进?

4

2 回答 2

6

您会发现自动缩进会更好或更差,具体取决于您选择分割行的确切位置。在您的示例中,我的风格是将左大括号和第一项带到下一行,之后缩进会表现得更好。

Public Sub Sub1()
    Dim foo As New MyClassA With
        {.FileName = "test",
         .Format = MyEnumForImageFormat.jpg,
         .IsReallySpecial = False,
         .Name = "testN",
         .SourceId = Guid.NewGuid(),
         .VariantName = "TestV",
         .Width = 800,
         .Height = 600}
End Sub

不想假设太多,我相信多行语句中每一行的缩进是由前一行控制的。但是,通过这种样式选择,您会发现使用自然返回来添加项目以正确定位自己。将任何粘贴片段复制到不同缩进级别的目标时,这仍然会导致缩进问题,但由于返回位置本身正确,因此手动重置每一行(重复向下、结束、删除、进入。)

类似的解决方案对多行 lambda 函数很有用,但是这些函数比直接的多行语句表现得更好。正确定位开头调用会自动更正整个例程的缩进。

这不太好,缩进浮动:

Public Sub Sub1()
    Dim a As New Action(Sub()
                            Dim b As Double = 4.0
                            Dim c As Double = 5.0
                            Dim d As Double = b * c
                        End Sub)
End Sub

这与压头表现得很好:

Public Sub Sub1()
    Dim a As New Action(
        Sub()
            Dim b As Double = 4.0
            Dim c As Double = 5.0
            Dim d As Double = b * c
        End Sub)
End Sub

就像个人风格我更喜欢这些,其他人可能会以不同的外观得到相同的结果。

于 2012-07-31T21:41:07.687 回答
1

我也觉得这很烦人。可以关闭 Vb.Net 的漂亮列表 - 看看这个问题:在 Visual Studio 中关闭自动格式化

在我看来,它走得太远了,但它应该停止你正在谈论的问题。

编辑:您可能还想使用自动缩进设置;我认为默认设置为“智能”。

于 2012-07-27T14:14:47.990 回答