私はRoslynを初めて使っています。私は、変数が意味モデルのある位置でスコープ内にあるかどうかを判断する方法があるかどうか疑問に思っています。私がやっていることについて少しの背景を述べるために、foreach
ブロックを変換して、Select
の結果を反復しようとしています。Roslynのある構文ノードで変数がスコープ内にあるかどうかを確認するにはどうすればよいですか?
foreach (int item in new int[0])
{
string str = item.ToString();
}
へ
foreach (string str in new int[0].Select(i => i.ToString()))
{
}
形式でここに私のコードの修正プロバイダの関連部分があります。現在、私はハードコーディング反復変数がitem
する午前:
var ident = SyntaxFactory.Identifier("item");
その後、私は、セレクタのSimpleLambdaExpressionSyntax
のBody
を取得していますし、(上記の場合には)item.ToString()
を取得するためにitem
とパラメータi
に置き換えてください。
var paramTokens = from token in selectorBody.DescendantTokens()
where token.Text == selectorParam.Identifier.Text
select token;
selectorBody = selectorBody.ReplaceTokens(paramTokens, (_, __) => ident);
は、私は私のコードの修正プロバイダが遺伝子をしないように、item
という名前の変数がforeach
ブロックの場所でスコープ内にすでにあるかどうかを伝える方法があるかどうかを知りたいです競合する変数宣言を評価します。 SemanticModel/Symbol/etcを使って何らかの形で達成することは可能でしょうか? API?
ありがとうございました。