我正在开发一个由另一位开发人员制作的项目,我已经被分配了这项工作来添加额外的功能,尽管这个问题并不是关于一个应用程序,它是'关于一种语言。
在C#中,我发现自己每天大约运行50次,我需要从方法中获取值并将其存储到变量中,或者我需要存储变量,或者即使我只需要硬编码变量的东西。
我的头脑还是心脏?我的头说将它存储在一个变量中我需要在将来多次使用它,但后来我心里说让我们懒得把它添加到if检查,而不是调用变量,让我给你一个例子......
示例1:
var name = SomeClass.GetName();
if (name.Contains("something"))
{
// do something
}
示例2:
if (SomeClass.GetName().Contains("something"))
{
// do something
}
我想我要问的是,它有什么优势吗?或者它真的不重要吗?
我通过存储这些来使用内存吗?特别是如果我在所有不同类型的方法中存储数百个解决方案?
是否值得在if中直接使用它,或者我是否应该只是为了以防万一?有人可以解释这个区别吗?如果有的话。
我在谈论如果我只使用过一次这个变量,所以不要担心“不得不在多个位置进行更改”#34;"问题,虽然如果有人确实想进入那个,我会很感激。
答案 0 :(得分:4)
我认为在表现明智和记忆方面不会有任何明显的优势。但是当我们研究以下场景时,存储返回值有一些优点。
SomeClass.GetName()
)可能会返回null
考虑到SomeClass.GetName()
可能会在某些条件下返回null
,然后null.Contains()
肯定会抛出NullReferenceException
[这两个例子都是相同的列出]在这种情况下,您可以执行以下操作:
var name = SomeClass.GetName();
if (name!= null && name.Contains("something"))
{
// do something
}
这里你只使用返回值来检查.Contains("something")
,考虑到你想在稍后的调用方法中使用返回值,那么最好将值存储在局部变量中而不是调用这个方法反复。 如果仅用于检查contains
,则将返回类型更改为布尔值并在方法中完成作业
答案 1 :(得分:1)
问自己关于这行代码的问题:
var name = SomeClass.GetName();
GetName()
方法有多贵?它是通过互联网从某个地方下载文件,下载文件需要几秒钟到几分钟?或者它正在进行一些需要几秒钟到几分钟的疯狂计算。或者是从数据库获取数据?这些答案将帮助您确定是否应将其存储在变量中,然后重用该变量。
接下来的问题,即使上面的答案是“Na!它很快,也没什么特别的”,就是问问自己:“你现在这个电话中有多少个地方?1?10?100?如果你的老板有一天来,说:“你知道那种方法GetName()
,我们就不会再使用它了。我们将使用另一个名为GetName2()
的方法。它需要多长时间?想象一下,如果你需要在100个不同的地方进行更改。
所以我的观点很简单: 一切都取决于 。