Мне нужно получить список свойств из MyClass, исключая те, которые доступны только для чтения, могу ли я их получить?
public class MyClass
{
public string Name { get; set; }
public int Tracks { get; set; }
public int Count { get; }
public DateTime SomeDate { set; }
}
public class AnotherClass
{
public void Some()
{
MyClass c = new MyClass();
PropertyInfo[] myProperties = c.GetType().
GetProperties(BindingFlags.Public |
BindingFlags.SetProperty |
BindingFlags.Instance);
// what combination of flags should I use to get 'readonly' (or 'writeonly')
// properties?
}
}
И, наконец, я могу их отсортировать? Я знаю, как добавить OrderBy <>, но как? Я просто использую расширения. Заранее спасибо.
1 ответ
Вы не можете использовать BindingFlags для указания свойств только для чтения или только для записи, но вы можете перечислить возвращаемые свойства, а затем протестировать свойства CanRead и CanWrite PropertyInfo следующим образом:
PropertyInfo[] myProperties = c.GetType().GetProperties(BindingFlags.Public |
BindingFlags.SetProperty |
BindingFlags.Instance);
foreach (PropertyInfo item in myProperties)
{
if (item.CanRead)
Console.Write("Can read");
if (item.CanWrite)
Console.Write("Can write");
}
BindingFlags.SetProperty
в этот контекст, не так ли? В остальном GetProperties().Where(p => p.CanWrite)
или, может быть, Where(p => p.CanRead && p.CanWrite)
- хорошее решение.
Похожие вопросы
Новые вопросы
c#
C# (произносится как «see Sharp») — это высокоуровневый мультипарадигменный язык программирования со статической типизацией, разработанный Microsoft. Код C# обычно нацелен на семейство инструментов и сред выполнения Microsoft .NET, которое включает в себя .NET, .NET Framework, .NET MAUI и Xamarin среди прочих. Используйте этот тег для ответов на вопросы о коде, написанном на C#, или о формальной спецификации C#.
PropertyInfo
есть пара свойств, которые указывают на возможность чтения / записиmyProperties.IsReadOnly
- одно из свойств PropertyInfo []