Я пытаюсь получить открытые поля, используя отражение от сборки.
Сборка содержит только один класс, как показано ниже:
public abstract class User
{
private object _iAmPrivateField;
protected object IAmProtectedField;
internal object IAmInternalField;
public object IAmPublicField;
private void IAmPrivateMethod() { }
protected void IAmProtectedMethod() { }
internal void IAmInternalMethod() { }
public void IAmPublicMethod() { }
private object IAmPrivateProperty { get; set; }
protected object IAmProtectedProperty { get; set; }
internal object IAmInternalProperty { get; set; }
public object IAmPublicProperty { get; set; }
}
Этот метод извлекает открытые поля из данной сборки:
public FieldInfo[] GetPublic(Assembly assembly)
{
return assembly.GetTypes()
.SelectMany(x => x.GetFields(BindingFlags.Public | BindingFlags.Instance))
.Where(x => x.IsPublic).ToArray();
}
Вышеприведенный пример работает должным образом - результат равен 1.
Однако я добавил асинхронный метод внутри класса
public async Task IAmAsyncMethod() { }
После изменения выше, GetPublic()
возвращает 4 вместо 1.
Есть ли возможность отфильтровать эти поля, которые GetFields()
по-прежнему возвращают 1?