我对C# (C++程序员主要是以Java作为强第二语言,还有一些是我使用的较少)还是很陌生的;我使用的是带有统一的C#,但我有一个似乎与C#相关的问题,而不是团结。
我在某种程度上转向了函数式编程,即不是
// C++
int someFunction(int a) {
int someCalculatedValue = a * a;
someCalculatedValue /= 2;
return someCalculatedValue * 3;
}我会做这样的事
// Again C++
int someFunction(int a) {
const int inputSquared = a * a;
const int inputSquaredHalved = inputSquared / 2;
return inputSquaredHalved * 3;
}现在,我想在C#中这样做,但我已经尝试过了
// C#
const float maxGrowth = GrowthRate * Time.deltaTime;但是Mono抱怨说,maxGrowth没有被分配一个“常量值”--所以我假设C#的const关键字实际上等同于来自C++11的'constexpr‘?
如果是这样的话,有没有办法在C#中实现我想要的呢?最好不调用某些容器类(除非编译器擅长于提高效率?)。
我认为从我所读到的情况来看,C#在语言上比C++更接近于C++;不可变的类而不是const成员函数?
发布于 2014-06-24 21:02:47
readonly
当字段声明包括只读修饰符时,对声明引入的字段的赋值只能作为声明的一部分或在同一个类中的构造函数中进行。
局部变量没有等效值。你得把它变成一个字段。
发布于 2014-12-19 16:46:48
可以将局部变量声明为迭代变量。迭代变量是只读的。是的,很丑。
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'"
}发布于 2019-08-01 14:43:44
我认为更好的解决这个案子的方法是使用声明
示例:
using (var font = new Font("Arial", 10.0f))
{
byte charset = font.GdiCharSet;
}字体变量是不可变的
参考资料:
https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/using-statement
https://stackoverflow.com/questions/24396179
复制相似问题