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;
}
.....
}