【发布时间】:2010-07-20 22:52:59
【问题描述】:
我想我们都同意 C# 3.0 中的自动属性很棒。像这样的:
private string name;
public string Name
{
get { return name; }
set { name = value; }
}
简化为:
public string Name { get; set; }
可爱!
但是,如果我想在“设置”时使用 ToUpperInvariant() 方法转换名称字符串,我该怎么办。我需要恢复到旧的 C# 2.0 创建属性的风格吗?
private string name;
public string Name
{
get { return name; }
set { name = value.ToUpperInvariant(); }
}
或者有没有更优雅的方式来实现这一点?
【问题讨论】:
-
恐怕你被 C# 2.0 的方式卡住了。
-
我认为改变值使得外部调用者不会得到与设置相同的值是“副作用”并且不可取(即:string s = "blah"; foo.Name = s; (foo.Name==s) 有时是错误的,这对你的类的消费者来说是意想不到的)你应该把它保留为自动属性并执行 ToUpperInvariant();当您需要在内部使用它时,或者提供一个仅包含执行 ToUpperInvariant() 的 getter 的私有属性。
-
@David:我的脑海里也闪过同样的想法。我仍然不确定我希望它以哪种方式运行。在我现在正在处理的特定情况下,我正在处理主要是数字的条形码,但其中包含 2 个字母字符。它们是大写还是小写并不重要,但如果它们一直都是大写的,那就太好了。所以我认为我对你描述的“副作用”没有意见。但总的来说,我想我会同意你的评价。感谢您的提示。
标签: c#-3.0 setter automatic-properties