Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/312.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# 仅初始化函数内的值一次_C#_C++ - Fatal编程技术网

C# 仅初始化函数内的值一次

C# 仅初始化函数内的值一次,c#,c++,C#,C++,可能重复: 如果你有一个大的函数,在中间的某个地方,你有一个只有在第一次遇到它时才被声明的值。 在C++中,可以使用static来表示: void func() { ... ... static double startPosition = 0.0; int var = startPositino - value; startPosition = var; ... } 但是在c语言中,函数内部不能有静态变量,有没有其他方法可以做到这一点而不在函数外部声明它?“如果函数

可能重复:

如果你有一个大的函数,在中间的某个地方,你有一个只有在第一次遇到它时才被声明的值。 在C++中,可以使用static来表示:

void func() {
  ...
  ...
  static double startPosition = 0.0;
  int var = startPositino - value;
  startPosition = var;
  ...
}

但是在c语言中,函数内部不能有静态变量,有没有其他方法可以做到这一点而不在函数外部声明它?

“如果函数很大”这就是你的问题所在。问题不在于c为什么不允许函数中的静态变量。如果它是
私有静态
字段,它会对你产生影响吗?这是你在C#中能做的最好的了。@Merni:链接问题的公认答案告诉你,你想要的是不可能的。与方法静态最接近的“等价物”是类静态。您的代码将无法编译。
largeFunction()
的返回类型是什么?这与这个问题有什么关系呢?代码示例确实成功地演示了如何在C#中实现这一点的一般概念,因为它不编译“开箱即用”是非常苛刻的。我没有投票是因为编译错误。但因为答案实际上并不能回答任何问题。这只是一个没有任何解释的代码示例,它与问题之间的关系并不明显。在你的“大函数”中(作为提示:尝试将你的“大函数”分解为更小的代码块…多个方法会更容易),放置一个条件:如果Begging声明的bool为真。。。初始化变量。之后,将其切换为false,变量将只初始化一次
bool changed = true;



void func() // the large function from the question (it wasn't specified what it does or what is called)
{
   .....

   if(changed)
   {
       // here you initalize you variable (the static from the c++)
       changed = false;
   }

   .....
}