【发布时间】:2015-04-24 14:50:04
【问题描述】:
我有以下代码:
class SearchCriteria
{
public string Name { get; set; }
public string Email { get; set; }
public string Company { get; set; }
// ... around 20 fields follow
public void Trim()
{
if( ! String.IsNullOrEmpty( Name ) )
{
Name = Name.Trim();
}
if( ! String.IsNullOrEmpty( Email ) )
{
Email = Email.Trim();
}
// ... repeat for all 20 fields in the class.
}
}
我想编写一个可以正确修剪字段的函数,例如:
public void Trim()
{
Trim( Name );
Trim( Email );
// ...
}
private static void Trim( ref string field )
{
if( ! String.IsNullOrEmpty( field ) )
{
field = field.Trim();
}
}
当然,这在 C# 中是不允许的。 我有一个选择是编写一个助手并使用反射。 有没有其他方法可以实现这一点(考虑到这么多属性肯定会对特定场景产生性能影响,而我负担不起)?
【问题讨论】:
-
也许你可以在它们各自的属性设置器中修剪字符串?
-
我可能会重新设计整个类以使用 HashMap 来保存 20 个不同的字符串值,因为它们似乎是可选属性列表。然后你有一个 PUT 方法,它可以进行修剪。
-
@Falco:你怎么知道所有都是字符串?可能有一个
DateTime DayOfBirth。使用List<String>太抽象了,因为你不能说:再给我SearchCriteria.Email。如果你使用Dictionary<string, string>,你必须知道密钥。 -
@TimSchmelter 您可以为字典的键名创建静态常量。或者一个 Enum 并有一个 dictionary
这将清理类很多。 -> 而且我确定只有字符串字段,因为他想在所有字段上调用 trim()。你不能修剪日期;-) -
我想说的是,拥有 20 个属性的情况并不少见,通常最好为它们使用
List<string>。您节省了几行代码,但代码变得更糟,因为所有代码都必须是字符串,以后无法更改(例如,将string Company更改为Company Company)。您必须以某种方式循环它们或知道键,对于其他开发人员来说,该类不再可读或可维护。基本上你是在用字符串替换 OOP 概念。
标签: c#