[英]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.