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,我檢查診斷的調試器,它是空的(所以沒有編譯錯誤)。
我在做什麼錯?
如果您在此之後立即通過該職位,我們會更好地工作嗎? –
是的,現在我知道了 - 花了幾天之後... –
如果這是正確答案,您可以回答自己的問題。您可能還想提交[在GitHub上](https://github.com/dotnet/roslyn)的錯誤,因爲我不確定這是否爲預期的行爲。 –