在C#中我应该重用一个函数/属性参数来计算更清晰的临时值还是创建一个临时变量?

时间:2010-06-03 21:52:37

标签: c# parameters

以下示例可能没有问题,但它应该足以说明一点。想象一下,除了修剪之外还有很多工作要做。

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是不必要的。我并不总是反对临时变量,但是当它们的使用非常有限并且它们没有节省那么多的打字时,我强烈不想使用它们。

2 个答案:

答案 0 :(得分:4)

首先,这不是什么大问题。

但我会在这里介绍一个临时变量。它没有任何成本,也不容易出错。想象一下,有人必须稍后维护代码。如果价值只有1个含义和目的,那就更好了。

不要将其称为temp,将其称为cleanedValue或其他内容。

答案 1 :(得分:4)

最好不要更改传入参数的值,即使您在技术上可以。请勿触摸value

  

我不是临时变量的忠实粉丝。

好吧,编程很大程度上是关于在整个地方创建临时变量,读取和分配值。你最好开始爱他们。 :)

关于财产的另一个评论。虽然你可以在技术上放置很多逻辑,但建议保持属性简单,尽量不要使用任何可能抛出异常的代码。需要调用其他函数可能表明此属性最好是一个方法,或者某处需要一些初始化代码。只需重新思考你正在做什么,以及它是否真的看起来像一个属性。