哪种标识变量更适合作为参数传递给方法?

4
假设有以下方法:
public void ShareClassStuff(int shareClassId)
{
    var shareClass = _shareClassService.GetShareClassById(shareClassId);

    (if shareClass != null)
        var shareClassStat = _shareClassService.GetShareClassStat(shareClass.Id);

    //go on to do stuff with shareClass & shareClassStat 
}

在这里,我通过向服务传递shareClassId来获取一个shareClass,该服务返回我需要的对象。接下来,我必须向另一个方法传递一个Id以获取一些不同的数据。

我的问题是,在第二个服务调用中,是否最好使用shareClassId变量,例如:

GetShareClassStat(shareClassId)

或者是 shareClass 对象的 Id 属性,例如:Id
GetShareClassStat(shareClass.Id)

或者这是否重要?
4个回答

0

我认为这并不重要。


0

虽然人们可能会争论两种方式,但传递shareClassId有非常微小的好处:

shareClass.Id是一个属性,因此是一个方法调用(可能会被优化内联)。shareClassId是一个简单的整数。

因此,传递参数有非常小的优势。

更新

还有另一个原因,人们可能更喜欢使用参数:它是一致的。您在第一次“按ID查找”时使用了参数,因此再次使用参数。

这些原因都不是非常令人信服,但既然您问了,我假设您对任何可以想象的推理都感兴趣。


我认为可以安全地假设,如果传递的是shareClass本身,则仍需要在被调用的方法中评估该属性。 - Jon Skeet
@Jon:问题是:我应该传递我已经拥有并知道与我用ID检索的对象的Id属性相同的ID,还是应该转而使用属性?很明显,GetShareClassStat方法只是另一个查找方法,它从Id返回一个对象。虽然您的答案很有用,但似乎不适用于此场景。 - Tergiver
我认为我们需要更多的信息才能确定。如果你是对的,我会说我的答案是有用的,并且应该引导OP只传递ID——因为这是它应该逻辑上依赖的全部。 - Jon Skeet
@Jon:但是这样原始问题仍然存在:我应该如何传递仅ID?localVariableWithTheId还是someObject.TheIdFromTheProperty - R. Martinho Fernandes
@Martinho:啊,我很可能完全误解了问题。糟糕。我以为问题是关于方法是否应该只接受ID还是整个对象的引用。将删除我的完全错误的答案... - Jon Skeet

0

这没关系。只有在你的 GetShareClassById() 方法停止返回 null 并开始返回一个空类时,稍后才会有影响。现在你有一个无效 ID 的类。虽然它永远不会发生,但是这会导致问题。

如果你在意节省 0.0001 秒的速度,那就传递变量吧。


0

我认为从性能角度来看并不重要,但是我建议将shareClassId传递给第二个方法,而不是shareClass.Id。

原因是当你使用shareClass.Id时,你现在对代码的位置有了依赖。 必须先调用_shareClassService.GetShareClassById然后才能调用_shareClassService.GetShareClassStat。同时,你引入了对实现_shareClassService.GetShareClassById以正确填充Id属性的依赖。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接