以下示例可能没有问题,但它应该足以说明一点。想象一下,除了修剪之外还有很多工作要做。
public string Thingy
{
set
{
// I guess we can throw a null reference exception here on null.
value = value.Trim(); // Well, imagine that there is so much processing to do
this.thingy = value; // That this.thingy = value.Trim() would not fit on one line
...
所以,如果赋值必须采用两行,那么我要么滥用重用参数,要么创建一个临时变量。我不是临时变量的忠实粉丝。另一方面,我不是复杂代码的粉丝。我没有包含涉及函数的示例,但我相信您可以想象它。我担心的一个问题是,如果函数接受了一个字符串并且参数被“滥用”,然后有人在两个地方都将签名更改为ref
- 这应该搞砸了,但是......谁会故意制造这样的改变,如果它已经没有参考?在这种情况下似乎是他们的责任。如果我把value
的价值搞得一团糟,我是不是在做一些非常重要的事情?如果您认为这两种方法都是可以接受的,那么您更喜欢哪种方法?为什么?
感谢。
编辑:当我说我不是临时变量的粉丝时,这就是我的意思。我不喜欢这样的代码:
string userName = userBox.Text;
if (userName.Length < 5) {
MessageBox.Show("The user name " + userName + " that you entered is too short.");
....
同样,这可能不是向用户传达问题的最佳方式,但这只是一个例子。在这种情况下,我强烈认为变量userName
是不必要的。我并不总是反对临时变量,但是当它们的使用非常有限并且它们没有节省那么多的打字时,我强烈不想使用它们。
答案 0 :(得分:4)
首先,这不是什么大问题。
但我会在这里介绍一个临时变量。它没有任何成本,也不容易出错。想象一下,有人必须稍后维护代码。如果价值只有1个含义和目的,那就更好了。
不要将其称为temp
,将其称为cleanedValue
或其他内容。
答案 1 :(得分:4)
最好不要更改传入参数的值,即使您在技术上可以。请勿触摸value
。
我不是临时变量的忠实粉丝。
好吧,编程很大程度上是关于在整个地方创建临时变量,读取和分配值。你最好开始爱他们。 :)
关于财产的另一个评论。虽然你可以在技术上放置很多逻辑,但建议保持属性简单,尽量不要使用任何可能抛出异常的代码。需要调用其他函数可能表明此属性最好是一个方法,或者某处需要一些初始化代码。只需重新思考你正在做什么,以及它是否真的看起来像一个属性。