我是C#的新手(主要是C++程序员,Java是强大的第二个,而其他一些我不经常使用); 我正在使用C#和Unity,但我有一个似乎与C#相关的问题而不是Unity.
我一直在朝着功能风格的编程方向发展,即代替
// C++
int someFunction(int a) {
int someCalculatedValue = a * a;
someCalculatedValue /= 2;
return someCalculatedValue * 3;
}
Run Code Online (Sandbox Code Playgroud)
我会做这样的事情
// Again C++
int someFunction(int a) {
const int inputSquared = a * a;
const int inputSquaredHalved = inputSquared / 2;
return inputSquaredHalved * 3;
}
Run Code Online (Sandbox Code Playgroud)
现在,我想在C#中做到这一点,但我已经尝试过了
// C#
const float maxGrowth = GrowthRate * Time.deltaTime;
Run Code Online (Sandbox Code Playgroud)
但Mono抱怨说,maxGrowth没有被赋予"常量值" - 所以我假设C#的const关键字实际上相当于来自C++ 11的'constexpr'?
如果是这样,有没有办法在C#中做我想做的事情?最好不要调用一些容器类(除非编译器擅长提高效率?).
我假设从我所读到的内容中,C#在语言方面比C++更接近于Java; 不可变类而不是const-member函数?
Zun*_*Tzu 18
您可以将局部变量声明为迭代变量.迭代变量是只读的.是的,很难看.
foreach (float maxGrowth in new[] { GrowthRate * Time.deltaTime })
{
maxGrowth = 0; // won't compile: "error CS1656: Cannot assign to 'maxGrowth' because it is a 'foreach iteration variable'"
}
Run Code Online (Sandbox Code Playgroud)
readonly当字段声明包含只读修饰符时,声明引入的字段的赋值只能作为声明的一部分或在同一个类的构造函数中出现.
局部变量没有等价物.你必须把它变成一个领域.
| 归档时间: |
|
| 查看次数: |
3477 次 |
| 最近记录: |