2016-05-17 26 views
2

這裏是我嘗試使用羅斯林研究C#代碼:Recommender.GetRecommendedSymbolsAtPositionAsync返回了太多的符號

using System; 
namespace TEST 
{ 
    public class MyClass 
    { 
     public static void Print() 
     { 
      Console.WriteLine("Hello World"); 
     } 
    } 
} 

我打電話

I call IEnumerable<ISymbol> symbols = Recommender.GetRecommendedSymbolsAtPositionAsync(semanticModel,130, TheWorkspace).Result; 

注 - 字符130是第一個「我」內的WriteLine。

我期望獲得類似於VS智能感知的smth:包括Write和WriteLine在內的多個選項列表。相反,我得到了222個符號的列表,包括一些名稱空間等。如果使用SemanticModel.LookupSymbol方法,我會得到類似的結果。

這裏是我的全碼:

public class IntellisenseVM 
{ 
    private string _text = 
@"using System; 
namespace TEST 
{ 
    public class MyClass 
    { 
     public static void Print() 
     { 
      Console.WriteLine(""Hello World""); 
     } 
    } 
}"; 
    const string DOC_NAME = "MyDoc.cs"; 

    public AdhocWorkspace TheWorkspace { get; set; } 

    public IntellisenseVM() 
    { 
     TheWorkspace = new AdhocWorkspace(); 

     string projName = "NewProject"; 

     ProjectId projId = ProjectId.CreateNewId(); 

     VersionStamp versionStamp = VersionStamp.Create(); 

     ProjectInfo projInfo = ProjectInfo.Create(projId, versionStamp, projName, projName, LanguageNames.CSharp); 


     SourceText sourceText = SourceText.From(_text); 

     projInfo = projInfo.WithMetadataReferences 
     (
      new MetadataReference[] 
      { 
       MetadataReference.CreateFromFile(typeof(object).Assembly.Location) 
      } 
     ); 

     TheWorkspace.AddProject(projInfo); 


     Document doc = 
      TheWorkspace.AddDocument(this.TheWorkspace.CurrentSolution.ProjectIds[0], "MyDoc.cs", sourceText); 

     SemanticModel semanticModel = doc.GetSemanticModelAsync().Result; 

     IEnumerable<Diagnostic> diagnostics = semanticModel.GetDiagnostics(); 
     IEnumerable<ISymbol> symbols = 
      Recommender.GetRecommendedSymbolsAtPositionAsync(semanticModel, 130, TheWorkspace).Result; 
    } 
} 

BTW,我檢查診斷的調試器,它是空的(所以沒有編譯錯誤)。

我在做什麼錯?

+0

如果您在此之後立即通過該職位,我們會更好地工作嗎? –

+0

是的,現在我知道了 - 花了幾天之後... –

+1

如果這是正確答案,您可以回答自己的問題。您可能還想提交[在GitHub上](https://github.com/dotnet/roslyn)的錯誤,因爲我不確定這是否爲預期的行爲。 –

回答

2

事實證明,爲了得到正確的結果,你需要在週期後(而不是週期的位置)傳遞一個偏移量到位置。無論如何,正如我想的那樣,最好使用最終在GitHub的Roslyn-master分支或即將發佈的Roslyn更新中公佈的CompletionService。