Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 避免两次编码,一次在if条件下,一次在赋值-C中#_C# - Fatal编程技术网

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()表达式测试。因此,为“留在记忆中”而烦恼毫无意义。顺便说一句。