4
我是Roslyn的新手。我想知道是否有一種方法可以告訴一個變量是否在語義模型中某個位置的範圍內。爲了對我正在做什麼有一些背景知識,我試圖對foreach
塊進行轉換,以遍歷Select
的結果,例如,形式的如何判斷某個變量是否在Roslyn的某個語法節點的範圍內?
foreach (string str in new int[0].Select(i => i.ToString()))
{
}
到
foreach (int item in new int[0])
{
string str = item.ToString();
}
這裏是我的代碼修復提供商的相關部分。目前,我硬編碼的迭代變量是item
:
var ident = SyntaxFactory.Identifier("item");
然後,我檢索選擇的SimpleLambdaExpressionSyntax
的Body
,並且(在上述情況下)與item
替換參數i
獲得item.ToString()
:
var paramTokens = from token in selectorBody.DescendantTokens()
where token.Text == selectorParam.Identifier.Text
select token;
selectorBody = selectorBody.ReplaceTokens(paramTokens, (_, __) => ident);
我想知道是否有辦法告訴了一個名爲item
變量是否已經在範圍在foreach
塊的位置,所以我的代碼修復提供商不基因評估衝突的變量聲明。這可能以某種方式實現使用SemanticModel/Symbol /等。蜜蜂?
謝謝。