gpt4 book ai didi

c# - Rosyln 的 ToFullString() 输出是否预期包含先前的 "#endregion"?

转载 作者:行者123 更新时间:2023-11-30 20:41:33 39 4
gpt4 key购买 nike

我正在使用 Roslyn 开发一个搜索代码库的小工具。一个功能是我可以搜索某个方法是否存在,如果存在,我将返回完整的方法文本以显示在 UI 上。

我正在使用集成了 Roslyn 的 Visual Studio 2015。我观察到的一个奇怪情况是特定方法是 #region 中的第一个方法。

每当我获得该特定方法的全文时,我都会从前一个区域结尾和当前区域开始部分获得额外的#endregion。

我为某个区域内的第一个方法获取的示例输出。

#endregion      -- why is this coming?

#region Public Methods and Operators

/// <summary>
/// My Method's summary.
/// </summary>
/// <param name="param1">
/// The param1.
/// </param>
/// <returns>
/// returns something
/// </returns>
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult SampleMethod(Parameter param1)
{
....
....
sample code
return this.RedirectToAction("sample_action");
}

下面给出了我为获取完整方法文本而编写的代码。

var MethodText = ((MethodDeclarationSyntax)method).ToFullString()

这是预期的工作方式吗?

最佳答案

解析器有一个通用规则,即“一行中的琐事本身会附加到 future 某个行中的下一个真实标记”。所以在这种情况下,方法之前的所有琐事都附加到下一个方法。 #endregion 没有做其他事情的特殊情况逻辑。或许它应该但现在不是。

您可能需要编写一些自定义代码来调整您的显示。例如,您可能想要排除所有不是文档评论琐事的琐事。考虑这个更人为的案例:

#region Comment

// some long comment about the method below me

#endregion

void AbandonAllHopeYeWhoEntersHere() { ...}

你想显示吗?老实说,不太确定。

琐事并不琐碎。它涉及在很多情况下弄清楚用户意图,所以我们采用简单的规则而不是大量的启发式方法。 (我们经常考虑将 trivia 重命名为“complexia”或其他名称以警告从远处接近的人,但最终决定不这样做。)

关于c# - Rosyln 的 ToFullString() 输出是否预期包含先前的 "#endregion"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32250878/

39 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com