最简单的方法是使用
ConvertAll
:
myList = myList.ConvertAll(d => d.ToUpper())
与
ForEach
循环不太不同,原始列表被循环,而
ConvertAll
则创建一个新的列表,需要重新分配。
var people = new List<Person> {
new Person { FirstName = "Aaa", LastName = "BBB", Age = 2 },
new Person{ FirstName = "Deé", LastName = "ève", Age = 3 }
};
people = people.ConvertAll(m => new Person
{
FirstName = m.FirstName?.ToUpper(),
LastName = m.LastName?.ToUpper(),
Age = m.Age
});
回答您的更新:
我不想循环或逐个字段进行操作。通过反射有没有一种方法来大写每个属性的值?
如果您不想循环或逐个字段操作,可以使用类中的属性使其转换为大写,例如:
public class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
public int Age { get; set; }
public string FirstNameUpperCase => FirstName.ToUpper();
public string LastNameUpperCase => LastName.ToUpper();
}
或者您可以像这样使用后向字段。
public class Person
{
private string _firstName;
public string FirstName {
get => _firstName.ToUpper();
set => _firstName = value;
}
private string _lastName;
public string LastName {
get => _lastName.ToUpper();
set => _lastName = value;
}
public int Age { get; set; }
}
MIN(N,M)
次,进行M*N
次方法调用。即使使用反射,你也会循环... - user7116