[英]How to get TypeConverter when using Source Generators
我可以使用屬性在我的代碼中顯式設置所有類型轉換器,但是在使用 TypeDescriptor.GetConverter 時如何獲取隱式類型轉換器。
private static string? GetTypeConverter(Compilation compilation, IPropertySymbol propertySymbol)
{
var typeConverterAttribute = compilation.GetTypeByMetadataName("System.ComponentModel.TypeConverterAttribute");
if (typeConverterAttribute is null)
{
return null;
}
var propertySymbolTypeConverter = GetTypeConverter(propertySymbol, typeConverterAttribute);
if (propertySymbolTypeConverter is not null)
{
return propertySymbolTypeConverter;
}
var propertySymbolTypeTypeConverter = GetTypeConverter(propertySymbol.Type, typeConverterAttribute);
if (propertySymbolTypeTypeConverter is not null)
{
return propertySymbolTypeTypeConverter;
}
// TODO: This does not work as it uses reflection.
// var type = Type.GetType(propertySymbol.Type.ToDisplayString());
// if (type is not null)
// {
// return TypeDescriptor.GetConverter(type).ToString();
// }
return null;
}
只需做框架所做的事情:
return new TypeConverter();
我發現我需要提供完全限定的類型字符串
var format = new SymbolDisplayFormat(
typeQualificationStyle: SymbolDisplayTypeQualificationStyle.NameAndContainingTypesAndNamespaces,
genericsOptions: SymbolDisplayGenericsOptions.IncludeTypeParameters | SymbolDisplayGenericsOptions.IncludeTypeConstraints | SymbolDisplayGenericsOptions.IncludeVariance
);
var type = Type.GetType(propertySymbol.Type.ToDisplayString(format));
if (type is not null)
{
return TypeDescriptor.GetConverter(type).ToString();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.