本文整理汇总了C#中PropertyDeclaration.Annotation方法的典型用法代码示例。如果您正苦于以下问题:C# PropertyDeclaration.Annotation方法的具体用法?C# PropertyDeclaration.Annotation怎么用?C# PropertyDeclaration.Annotation使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类PropertyDeclaration
的用法示例。
在下文中一共展示了PropertyDeclaration.Annotation方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: VisitPropertyDeclaration
public override void VisitPropertyDeclaration(PropertyDeclaration e)
{
var pd = e.Annotation<PropertyDefinition>();
if (pd != null)
{
if (!e.PrivateImplementationType.IsNull && pd.DeclaringType.IsCompilerGenerated())
{
// 将接口实现转换为显式实现
var convert = true;
if (pd.DeclaringType.Interfaces.Count > 1)
{
//TagSnapshotRange<T> IEnumerator<TagSnapshotRange<T>>.Current { get { …… } }
//object IEnumerator.Current { get { …… } }
var trInterface = e.PrivateImplementationType.Annotation<TypeReference>();
var hasSameNameInterfaces = pd.DeclaringType.Interfaces.Select(x => x.Resolve()).Where(x => x == null || x.WellFullName != trInterface.WellFullName && x.Properties.Any(y => y.WellName == pd.WellName));
if (hasSameNameInterfaces.Any())
{
if (hasSameNameInterfaces.Any(x => x == null) ||
!trInterface.HasGenericParameters ||
hasSameNameInterfaces.Any(x => x.HasGenericParameters))
{
convert = false;
}
}
}
if (convert)
{
e.PrivateImplementationType = null;
e.Modifiers |= Modifiers.Public;
}
}
var accessor = pd.GetMethod ?? pd.SetMethod;
if (accessor != null && accessor.HasOverrides)
{
// 属性重载或接口属性的显式实现
// bool ICollection.xxx
//====>
// bool ICollection.IsSynchronized
var access = accessor.Overrides.First();
if (access.Name.StartsWith("get_") || access.Name.StartsWith("set_"))
{
var opn = access.Name.Substring(4);
var opd = access.DeclaringType.Resolve().Properties.FirstOrDefault(x => x.Name == opn);
if (opd != null) e.Name = opd.WellName;
}
}
else if (e.HasModifier(Modifiers.Override))
{
}
}
base.VisitPropertyDeclaration(e);
}