c# - una - Cómo enumerar todas las variables de clase
que es set en programacion (5)
¿Hay alguna manera de enumerar todas las variables (campos) de una clase en C #. Si es así, ¿podría alguien darme algunos ejemplos de cómo guardarlos en una List
y obtenerlos tal vez utilizando los Anonymous Types
(var).
Esto listará los nombres de todos los campos en una clase (públicos y no públicos, tanto campos estáticos como de instancia):
BindingFlags bindingFlags = BindingFlags.Public |
BindingFlags.NonPublic |
BindingFlags.Instance |
BindingFlags.Static;
foreach (FieldInfo field in typeof(TheClass).GetFields(bindingFlags))
{
Console.WriteLine(field.Name);
}
Si desea obtener los campos basados en alguna instancia de objeto en su lugar, use GetType
en GetType
lugar:
foreach (FieldInfo field in theObject.GetType().GetFields(bindingFlags))
{
Console.WriteLine(field.Name);
}
Tu pregunta no está perfectamente clara. Parece que quieres los valores de los campos para una instancia determinada de tu clase:
var fieldValues = foo.GetType()
.GetFields()
.Select(field => field.GetValue(foo))
.ToList();
Tenga en cuenta que fieldValues
es List<object>
. Aquí, foo
es una instancia existente de tu clase.
Si desea campos public
y no public
, debe cambiar los indicadores de enlace a través de
var bindingFlags = BindingFlags.Instance |
BindingFlags.NonPublic |
BindingFlags.Public;
var fieldValues = foo.GetType()
.GetFields(bindingFlags)
.Select(field => field.GetValue(foo))
.ToList();
Si solo quieres los nombres:
var fieldNames = typeof(Foo).GetFields()
.Select(field => field.Name)
.ToList();
Aquí, Foo
es el nombre de tu clase.
var fields = whateverYourClassType.GetType().GetFields().Select(f => f.Name).ToList();
myClass.GetType().GetProperties()
No es exactamente la pregunta que se hizo, pero aquí se explica cómo obtener los valores de todas las propiedades del tipo Decimal de un objeto llamado "inv":
var properties = inv.GetType().GetProperties();
foreach (var prop in properties)
{
if (prop.ToString().ToLower().Contains("decimal"))
{
totalDecimal += (Decimal)prop.GetValue(inv, null);
}
}