C# 避免两次编码,一次在if条件下,一次在赋值-C中#
以下是我的示例代码:C# 避免两次编码,一次在if条件下,一次在赋值-C中#,c#,C#,以下是我的示例代码: if (_Timing != target.Split(':')[0] + ": ") _Timing = target.Split(':')[0] + ": "; 我检查\u计时是否不等于目标。拆分(':'[0]+“:”,然后将其分配到\u计时。我执行这个target.Split(':')[0]+“:”两次。我需要避免它 另一个例子是: if (db.Students.FirstOrDefault(x => x.Name == "Joe") != null)
if (_Timing != target.Split(':')[0] + ": ")
_Timing = target.Split(':')[0] + ": ";
我检查\u计时
是否不等于目标。拆分(':'[0]+“:”
,然后将其分配到\u计时
。我执行这个target.Split(':')[0]+“:”
两次。我需要避免它
另一个例子是:
if (db.Students.FirstOrDefault(x => x.Name == "Joe") != null)
var a = db.Students.FirstOrDefault(x => x.Name == "Joe");
在这里,我再次执行了两次db.Students.FirstOrDefault(x=>x.Name==“Joe”)
。这些样本只是一些例子。我需要避免两次这样的编码
我可以这样做,因为我收到了以下答案:
var splitted= target.Split(':')[0] + ": ";
if (_Timing != splitted)
_Timing = splitted;
但我不想做这样的事情,因为拆分后的将保留在内存中。我正在寻找一种不将这些临时数据保存到内存中的方法
有什么建议吗?您可以将可重用语句保存在一个变量中,并在流控制中需要进一步重用的地方重用:
var splitted= target.Split(':')[0] + ": ";
if (_Timing != splitted)
_Timing = splitted;
linq查询也是如此:
var student = db.Students.FirstOrDefault(x => x.Name == "Joe");
if (student != null)
{
// do something here with student
}
如果要避免编写linq查询,也可以引入以下方法:
public Student GetStudentByName(string name)
{
return db.Students.FirstOrDefault(x => x.Name == "Joe");
}
并重复使用:
var student = GetStudentByName("Joe");
if (student != null)
{
// do something here with student
}
您可以将可重用语句保存在变量中,并在流控制中需要进一步重用的任何位置:
var splitted= target.Split(':')[0] + ": ";
if (_Timing != splitted)
_Timing = splitted;
linq查询也是如此:
var student = db.Students.FirstOrDefault(x => x.Name == "Joe");
if (student != null)
{
// do something here with student
}
如果要避免编写linq查询,也可以引入以下方法:
public Student GetStudentByName(string name)
{
return db.Students.FirstOrDefault(x => x.Name == "Joe");
}
并重复使用:
var student = GetStudentByName("Joe");
if (student != null)
{
// do something here with student
}
删除if
块
_Timing = target.Split(':')[0] + ": ";
将指定移出if块
var student = db.Students.FirstOrDefault(x => x.Name == "Joe");
if (student != null)
{
//
}
删除if
块
_Timing = target.Split(':')[0] + ": ";
将指定移出if块
var student = db.Students.FirstOrDefault(x => x.Name == "Joe");
if (student != null)
{
//
}
根据你的要求,你说:
我可以这样做,因为我收到了以下答案:
var splitted= target.Split(':')[0] + ": ";
if (_Timing != splitted)
_Timing = splitted;
但我不想做这样的事情,因为splitted将保留在内存中。我正在寻找一种不将这些临时数据保存到内存中的方法。
有什么建议吗
是的,有一种方法可以明确地从内存中删除变量
您可以尝试这样做来实现同样的效果,并且变量splitted
不再保留在内存中:
var splitted= target.Split(':')[0] + ": ";
if (_Timing != splitted)
{
_Timing = splitted;
splitted = null;
GC.Collect(); // It this stage the 'splitted' is not longer remain in the memory.
}
根据你的要求,你说:
我可以这样做,因为我收到了以下答案:
var splitted= target.Split(':')[0] + ": ";
if (_Timing != splitted)
_Timing = splitted;
但我不想做这样的事情,因为splitted将保留在内存中。我正在寻找一种不将这些临时数据保存到内存中的方法。
有什么建议吗
是的,有一种方法可以明确地从内存中删除变量
您可以尝试这样做来实现同样的效果,并且变量splitted
不再保留在内存中:
var splitted= target.Split(':')[0] + ": ";
if (_Timing != splitted)
{
_Timing = splitted;
splitted = null;
GC.Collect(); // It this stage the 'splitted' is not longer remain in the memory.
}
有使用单行代码的吗?例如,如果右侧条件为true,则将输出分配到左侧。您不必担心:是否有使用单行代码的选项?例如,如果右侧条件为真,则将输出分配到左侧。您不必担心:考虑到OP希望时间总是这样,删除“if块”似乎确实是更优雅的解决方案。(就在纳粹分子进来说“代码解决方案没有帮助”并否决这一规则之前评论一下。)考虑到OP希望时间总是这样,删除“如果块”似乎确实是更优雅的解决方案。(在纳粹分子进来说“只使用代码的解决方案没有帮助”并否决这一规则之前,只是对此进行评论。)这个变量总是存在的,即使你不给它一个名字。处理器需要它来实现if()表达式测试。因此,为“留在记忆中”而烦恼毫无意义。顺便说一句,这个变量总是存在的,即使你没有给它命名。处理器需要它来实现if()表达式测试。因此,为“留在记忆中”而烦恼毫无意义。顺便说一句。