c#-为什么在用“注释选择”注释多行选择时,Visual Studio为什么求助于单行注释?

关于Visual Studio中的“注释选择”选项,我一直想知道的一些小知识(Ctrl K,Ctrl C).

当我注释此方法的实现时,将使用单行注释格式.

private void Foo()
{
    //Bar b = new Bar();
}

当我注释来自构造函数的参数(部分行)时,使用分隔注释格式.

private void Foo(Qux q)
{
    Bar b = new Bar(/*q*/);
}

在注释掉整个方法时会导致以下结果:

//private void Foo()
//{
//    Bar b = new Bar();
//}

我觉得在最后一种情况下定界注释格式会更合适,因为该规范说:

Single-line comments extend to the end of the source line. Delimited comments may span multiple lines.

有谁知道为什么在Visual Studio中注释多行选择时将其选择为默认格式?

解决方法:

这样做会有一些问题:

如果任何代码行中都有* /,将无法正常工作:

private void Foo(Qux q)
{
    //we use "*/image/*" flag here to find only images
    Bar b = new Bar("Some wildcard: */image/*");
}

评论到:

/*
private void Foo(Qux q)
{
    //we use "*/image/*" flag here to find only images
    Bar b = new Bar("Some wildcard: */image/*");
}
*/

如果您在已经包含分隔注释的部分上单击“注释选择”,那么尝试使用分隔注释包装代码将不起作用:

/*
private void Foo(Qux q)
{
    /* Some multiline 
     * comment
     */
    Bar b = new Bar();
}
*/

但是很好,我们可以通过插入多个定界注释和单行注释的组合来解决此问题:

/*
private void Foo(Qux q)
{
    /* Some multiline 
     * comment
*/
//   */
/*
    Bar b = new Bar();
}
*/

有点丑陋,但行得通.如果遇到该注释的代码,您是否能够立即识别出什么是代码部分以及注释部分是什么?此外,如果您按下“取消注释选择”命令,您是否知道要获得什么?

更进一步,想象一下,如果您评论此评论,它将变得更加丑陋且更加难以理解.

如果您在注释中的文本中带有* /,那么(我认为)解决/转义注释会变得更糟:

private void Foo(Qux q)
{
    //we use "*/image/*" flag here to find only images
    Bar b = new Bar("Some wildcard: */image/*");
}

转换为:

/*
private void Foo(Qux q)
{
    //we use "**//*/image/*" flag here to find only images
    Bar b = new Bar("Some wildcard: **//*/image/*");
}
/*

将上面令人困惑的注释代码与现有的单行实现进行比较:

//private void Foo(Qux q)
//{
//    /* Some multiline 
//     * comment
//     */
//    Bar b = new Bar();
//}

//private void Foo(Qux q)
//{
//    //we use "*/image/*" flag here to find only images
//    Bar b = new Bar("Some wildcard: */image/*");
//}

这样做的好处是代码与之前的样子几乎是1:1,只是以//字符作为前缀.如果您进一步评论或取消评论,它仍然是完全可读的并且仍然是完全可预测的.嵌套单行注释或嵌套定界注释都没有问题.

也许最后,从IDE的角度来看,它的实现非常非常简单:“注释选择”意味着向每行添加//前缀,“注释取消”意味着删除前一个//.绝不嘲笑解析代码/注释,或者解析不正确的语法代码/注释.

上一篇:PHP-更改我的wp模板中的注释标题


下一篇:javascript-注释“ Go Horse”在编码中是什么意思?这是某种过程吗?