Roslyn-CTP ile biraz deneme yapıyorum.Get TypeSyntax from ITypeSymbol
Şu anda beton türü var
'u değiştirmeye çalışıyorum.
var i=1;
haline gelmelidir:
int i=1;
türetilmiş tip bulmaktan kolaydır. Ancak bu kısım semantik modelde olduğu için bir
ITypeSymbol
aldım. Değiştirme sözdizimi modelinde olur, bu yüzden bir
TypeSyntax
'a ihtiyacım var. Şişirilmiş bir ad istemediğimden (
global::System.Int32
), dönüştürme bağlam bağımlıdır (
using
, iç içe türler vb.).
Roslyn'in bir parçası olan Visual Studio sürümü, bu işlevselliği "Basitleştirme türü adı" belgesinde zaten vardır, ancak bu dönüştürme işlemini gerçekleştirmenin kolay bir yolunu bulamadığım örnekleri gözden geçirdim. Şimdi kullanıyorum Kevin Pilch-BISSON cevabı dayanarak
:
var location = document.GetSyntaxTree().GetLocation(node);
string name = variableType.ToMinimalDisplayString((Location)location, (SemanticModel)document.GetSemanticModel());
ToMinimalDisplayString
bir CommonSyntaxTree
elde edilebilir bir konum.
bir başka zorluk document.GetSemanticModel()
ve CommonSyntaxTree.GetLocation
tek bir arayüz geri ise ToMinimalDisplayString
sınıfları Location
ve SemanticModel
gerektirmesidir.
Şimdilik işe yaramış gibi görünen sınıflara dökerek çalıştım.
Hmm, sınıflar C# özelliğine ve arabirimler bağımsız olarak görünüyor. Bu bir foreach
içinde var
için çalışmaz https://github.com/CodesInChaos/Roslyn
, ama o anki Roslyn yapı bir sınırlama şüpheli:
github üzerinde çalışan bir sürümünü yükledim.
Re: son ifadeniz: Doğru, CTP yapısının son haline getirilmesinden önce "foreach" uygulamasında "var" tam olarak uygulanmadık, üzgünüz. –