Ответ 1
Вы можете проверить, отмечен ли метод get
или set
атрибутом CompilerGenerated
. Затем вы можете комбинировать это с поиском частного поля, которое помечено атрибутом CompilerGenerated
, содержащим имя свойства и строку "BackingField"
.
Может быть:
public static bool MightBeCouldBeMaybeAutoGeneratedInstanceProperty(
this PropertyInfo info
) {
bool mightBe = info.GetGetMethod()
.GetCustomAttributes(
typeof(CompilerGeneratedAttribute),
true
)
.Any();
if (!mightBe) {
return false;
}
bool maybe = info.DeclaringType
.GetFields(BindingFlags.NonPublic | BindingFlags.Instance)
.Where(f => f.Name.Contains(info.Name))
.Where(f => f.Name.Contains("BackingField"))
.Where(
f => f.GetCustomAttributes(
typeof(CompilerGeneratedAttribute),
true
).Any()
)
.Any();
return maybe;
}
Это не дурацкое доказательство, довольно хрупкое и, вероятно, не переносное, скажем, Моно.