让它变得更容易。在这种情况下,返回时会产生曲折。我应该在末尾键入什么以从该方法接收VK_F2作为返回值?
internal uint AssignStartShortcut()
{
switch (currentStartValue)
{
case "F2":
return VK_F2;
}
return;// how this should look?
}
如果我在swith之后不使用return,那么我会收到一条消息:并非所有代码路径都返回值。
答案 0 :(得分:5)
您的错误很可能是
使用未分配的局部变量“名称”
C#编译器不允许使用未初始化的变量。如果 编译器检测到可能没有使用过的变量 初始化后,它会生成编译器错误CS0165。了解更多信息, 请参阅字段。请注意,此错误是在编译器时生成的 遇到可能导致使用未分配的构造 变量,即使您的特定代码没有。这样可以避免 确定分配的规则过于复杂的必要性。
轻松修复,对其进行初始化
internal uint AssignStopShortcut()
{
uint stopNumber = 0;
switch (currentStartValue)
...
或者确保静态分析器知道它不能掉线(即始终被初始化)
uint stopNumber;
switch (currentStartValue)
{
case "F3":
stopNumber = VK_F3;
return stopNumber; //squigly lines below
default:
// no other options
throw new InvalidOperationException("Bazzinga!");
}
甚至更好,只需返回 constant ,而不使用局部变量
internal uint AssignStopShortcut()
{
switch (currentStartValue)
{
case "F3":
return VK_F3; //squigly lines below
default:
throw new InvalidOperationException("Bazzinga!");
}
}
答案 1 :(得分:0)
在TheGeneral的解决方案中,您的问题是您需要初始化变量。
internal uint AssignStartShortcut()
{
uint startNumber = 0; //initialise variable
if (currentStartValue == "F2")
{
startNumber = VK_F2;
}
return startNumber; //value of 0 is returned if the IF statement conditon is not met.
}
从您的评论到TheGenral提出的解决方案,因为我还没有发表评论,这是因为在这种情况下,由于初始化变量设置为零,因此您仅在检查特定值,并且如果不满足该条件,则“ startNumber”不会使用“ VK_F2”或“ VK_F3”值进行更新。因此,这就是为什么Switch语句默认情况满足的原因,因为“ currentStartValue”没有任何情况。
例如,如果您想检查所有情况,它应该看起来像这样:
internal uint AssignStopShortcut()
{
uint stopNumber = 0; //initialise this variable is a must if it's to be declared in this method.
switch (currentStartValue)
{
case "F1": break;
case "F2": break;
case "F3":
stopNumber = VK_F3;
break;
case "F4": break;
case "F5": break;
case "F6": break;
case "F7": break;
case "F8": break;
default:
// no other options
throw new InvalidOperationException("Bazzinga!");
}
return stopNumber;
}
希望这会有所帮助。
答案 2 :(得分:0)
感谢大家的帮助。问题解决了,它不在if或switch语句中。原来不是应该传递的数据。我的错。再次感谢。