第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

使用 roslyn 檢測外部 api 調(diào)用

使用 roslyn 檢測外部 api 調(diào)用

C#
BIG陽 2022-12-24 10:11:13
我想知道如何檢測例如InvocationExpressionSyntax是來自我的代碼還是來自外部代碼。我試圖找到如何去做,但沒有成功。例子。:public async Task MyMethodAsync1(){   await MyMethodAsync2(); // How to know that this 'InvocationExpressionSyntax' is mine using roslyn ?}public async Task MyMethodAsync2(){  await Task.Delay(1); // How to know that this 'InvocationExpressionSyntax' is NOT mine using roslyn ?}謝謝
查看完整描述

2 回答

?
慕斯王

TA貢獻(xiàn)1864條經(jīng)驗(yàn) 獲得超2個(gè)贊

為了實(shí)現(xiàn)這一點(diǎn),您可以檢查您下DeclaringSyntaxReferences收到的來自是否為空。為了更清楚,您還可以通過檢查是否為 false來確保此符號不是由編譯器生成的ISymbolInvocationExpressionSyntaxIsImplicitlyDeclared


  public static bool IsDeclareInMetadata(this SemanticModel semanticModel, SyntaxNode node)

  {

    var info = semanticModel.GetSymbolInfo(node);

    return !(info.Symbol is null) && info.Symbol.DeclaringSyntaxReferences.IsDefaultOrEmpty && !info.Symbol.IsImplicitlyDeclared;

  }


查看完整回答
反對 回復(fù) 2022-12-24
?
狐的傳說

TA貢獻(xiàn)1804條經(jīng)驗(yàn) 獲得超3個(gè)贊

當(dāng)你說“我的代碼”或“外部代碼”時(shí),你需要定義你的意思。

假設(shè)“我的代碼”表示“編譯到當(dāng)前程序集中的代碼”,外部代碼表示“來自引用程序集的代碼”,這是找出它以比較程序集的最簡單方法。

假設(shè)您有一個(gè)SyntaxNodeAnalysisContext context, 和一個(gè)InvocationExpressionSyntax node, 您可以找到您正在調(diào)用的方法的符號,如下所示:

var symbol = context.SemanticModel.GetSymbolInfo(node, context.Cancellationtoken);

請記住,該符號可能為空,因此對其進(jìn)行測試。

您現(xiàn)在可以比較程序集:

bool fromSameAssembly = context.Compilation.Assembly.Equals(symbol.ContainingAssembly);

另一種選擇是查看符號的位置:

bool isInMetadata = symbol.Locations.Any(loc => loc.IsInMetadata);
bool isInSource = symbol.Locations.Any(loc => loc.IsInSource);


查看完整回答
反對 回復(fù) 2022-12-24
  • 2 回答
  • 0 關(guān)注
  • 131 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號