上下文:我们有以下代码示例:
public class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
public int Age { get; set; }
}
public static class PersonExtension
{
public static void TrimFirstName(Person person)
{
Console.WriteLine($"Start Trim {nameof(person.FirstName)}");
person.FirstName = person.FirstName.Remove(32);
Console.WriteLine($"End Trim {nameof(person.FirstName)}");
}
public static void TrimLastName(Person person)
{
Console.WriteLine($"Start Trim {nameof(person.LastName)}");
person.LastName = person.LastName.Remove(32);
Console.WriteLine($"End Trim {nameof(person.LastName)}");
}
}
public class Program
{
public static void Main()
{
var person = new Person { FirstName = "Foo", LastName = "Bar" };
PersonExtension.TrimFirstName(person);
PersonExtension.TrimLastName(person);
}
}
目标:我们希望重构代码,并将函数TrimFirstName
和TrimLastName
转换为单个函数,以使其更加枯燥.
我们目前停留在lambda表达式上,试图解决这个问题:
public static class PersonExtension
{
public static void TrimName(this Person person, Func<Person, string> action)
{
// Console.WriteLine($"Start Trim {nameof(person.LastName)}"); // ??
person.LastName = action(person).Remove(32); // how to assign to LastName/FirstName ???
// Console.WriteLine($"End Trim {nameof(person.LastName)}"); // ??
// more code here that uses person.<propertyName>
}
}
public class Program
{
public static void Main()
{
var person = new Person { FirstName = "Foo", LastName = "Bar" };
person.TrimName(x => x.FirstName);
}
}
问:我们如何使用lambda表达式来决定应该修剪哪些属性?