Таким образом в моем случае я делаю открытие структуры класса с помощью отражения. Я должен быть в состоянии узнать, является ли свойство автореализованным свойством объектом PropertyInfo. Я предполагаю, что API Reflection не представляет такой функциональности, потому что автосвойства являются зависимым C#, но там какое-либо обходное решение должно получить эту информацию?
Вы можете проверить, помечен ли метод 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;
}
Это не защита от дурака, довольно хрупкая и, вероятно, не переносимая, скажем, на Mono.