[英]function returning a const value
我有一个以下函数接受枚举值,并根据枚举值返回一个常量值(在不同的类中)。 现在我得到一个“Constant initializer missing”错误。
public const int Testfunction(TESTENUM TestEnum)
{
switch(TestEnum)
{
case TestEnum.testval1:
return testclass.constvalue;
case TestEnum.testVal2:
return testclass.constvalue1;
case TestEnum.testVal3:
return testclass.constvalue2;
}
}
函数的返回类型究竟如何? (我使用对象返回类型,这不会抛出任何错误)
有没有其他选择来实现相同的目标?
这里发生的是编译器认为您正在尝试声明一个名为Testfunction的公共常量整数字段,并且发现没有= 123;
非常惊讶= 123;
遵循标识符。 它告诉你它期望初始化器。
C#编译器中有许多地方,开发团队预计C和C ++用户会错误地使用通用的C / C ++语法。 例如, int x[];
有一个特殊的错误消息int x[];
这指出你可能意味着int[] x;
。 这是另一个地方的示例,其中编译器可以从检测常见错误的特殊用途错误消息中受益,并描述如何修复它。 如果您认为该功能很好,可以考虑请求该功能。
更一般地说,C#中的“const”意味着与C或C ++中的意思不同。 C#不具有不改变状态的“const函数”的概念,或者提供可提供潜在可变数据的只读视图的“const引用”。 在C#中,“const”仅用于声明字段(或本地)将被视为编译时常量。 (并且“readonly”用于声明一个字段只能在构造函数中写入,这也非常有用。)
从函数返回类型中删除“const”关键字应该可以解决问题
它应该是这样的
public int Testfunction(TESTENUM TestEnum)
{
...
返回类型不能声明为常量
.NET方法不能返回任何类型的const
..
const
关键字在那里无效:删除它。
最可能的工作代码:
public static class TestClass
{
public const int constValue1 = 1;
public const int constValue2 = 2;
public const int constValue3 = 3;
}
enum TestEnum
{
testVal1, testVal2, testVal3
}
public int TestFunction(TestEnum testEnum)
{
switch (testEnum)
{
case TestEnum.testVal1:
return TestClass.constValue1;
case TestEnum.testVal2:
return TestClass.constValue2;
case TestEnum.testVal3:
return TestClass.constValue3;
}
return 0; // all code paths have to return a value
}
首先,根据const(C#参考) :
const关键字用于修改字段或局部变量的声明。 它指定字段或局部变量的值是常量,这意味着它不能被修改。
在C#中, const
仅用作字段的修饰符(如TestClass.constValue1
)或局部变量,不适用于函数返回类型。
所以你来自伟大的C / C ++王国。 考虑到我对C / C ++的非常有限的知识,C / C ++中的const
返回类型只对指针有意义......
// C++ code
const int m = 1;
// It returns a pointer to a read-only memory
const int* a(){
return &m;
}
但除非您使用不安全的代码,否则C#中没有指针 。 只有值类型 (如int
/ DateTime
/ TestEnum
/ structs)和引用类型 (如string
/类)。 网上还有很多内容可供阅读。
因此int
是C#中的值类型,当您返回它时,它会被复制 。 因此,即使您返回“常量int
”,返回的值也不是常量 ,修改返回值将不会 “更改常量并导致SegFault”。
好吧,我忘了回答你的问题......
函数的返回类型究竟如何? (我使用对象返回类型,这不会抛出任何错误)
就像我在上面的代码中展示的那样, int
。
const int blah = 1
只声明一个int
类型的变量/字段blah
,其中一个不能修改它(通过执行blah = 2
)。 在C#中, const int
不是一个类型。
有没有其他选择来实现相同的目标?
嗯......我想我其实不需要回答这个......
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.