【发布时间】:2017-01-18 01:49:22
【问题描述】:
美好的一天。我正在从 vb.net 过渡到 C#,而我日历中的这个特定 switch 语句在 vb.net 上运行,但在 C# 上不运行。
这是我在 VB.Net 中的代码:
Function getlabel(ByVal day As DayOfWeek, ByVal row As Integer) As System.Windows.Forms.Label
Select Case day
Case DayOfWeek.Sunday
Select Case row
Case 1
Return su1
Case 2
Return su2
Case 3
Return su3
Case 4
Return su4
Case 5
Return su5
Case 6
Return su6
End Select
Case DayOfWeek.Monday
Select Case row
Case 1
Return m1
Case 2
Return m2
Case 3
Return m3
Case 4
Return m4
Case 5
Return m5
Case 6
Return m6
End Select
Case DayOfWeek.Tuesday
Select Case row
Case 1
Return tu1
Case 2
Return tu2
Case 3
Return tu3
Case 4
Return tu4
Case 5
Return tu5
Case 6
Return tu6
End Select
Case DayOfWeek.Wednesday
Select Case row
Case 1
Return w1
Case 2
Return w2
Case 3
Return w3
Case 4
Return w4
Case 5
Return w5
Case 6
Return w6
End Select
Case DayOfWeek.Thursday
Select Case row
Case 1
Return th1
Case 2
Return th2
Case 3
Return th3
Case 4
Return th4
Case 5
Return th5
Case 6
Return th6
End Select
Case DayOfWeek.Friday
Select Case row
Case 1
Return f1
Case 2
Return f2
Case 3
Return f3
Case 4
Return f4
Case 5
Return f5
Case 6
Return f6
End Select
Case DayOfWeek.Saturday
Select Case row
Case 1
Return sa1
Case 2
Return sa2
Case 3
Return sa3
Case 4
Return sa4
Case 5
Return sa5
Case 6
Return sa6
End Select
End Select
End Function
这是我尝试在 C# 中重新创建的代码:
public System.Windows.Forms.Label getlabel(DayOfWeek day, int row)
{
switch (day)
{
case DayOfWeek.Sunday:
switch (row)
{
case 1:
return su1;
case 2:
return su2;
case 3:
return su3;
case 4:
return su4;
case 5:
return su5;
case 6:
return su6;
}
break;
case DayOfWeek.Monday:
switch (row)
{
case 1:
return m1;
case 2:
return m2;
case 3:
return m3;
case 4:
return m4;
case 5:
return m5;
case 6:
return m6;
}
break;
case DayOfWeek.Tuesday:
switch (row)
{
case 1:
return tu1;
case 2:
return tu2;
case 3:
return tu3;
case 4:
return tu4;
case 5:
return tu5;
case 6:
return tu6;
}
break;
case DayOfWeek.Wednesday:
switch (row)
{
case 1:
return w1;
case 2:
return w2;
case 3:
return w3;
case 4:
return w4;
case 5:
return w5;
case 6:
return w6;
}
break;
case DayOfWeek.Thursday:
switch (row)
{
case 1:
return th1;
case 2:
return th2;
case 3:
return th3;
case 4:
return th4;
case 5:
return th5;
case 6:
return th6;
}
break;
case DayOfWeek.Friday:
switch (row)
{
case 1:
return f1;
case 2:
return f2;
case 3:
return f3;
case 4:
return f4;
case 5:
return f5;
case 6:
return f6;
}
break;
case DayOfWeek.Saturday:
switch (row)
{
case 1:
return sa1;
case 2:
return sa2;
case 3:
return sa3;
case 4:
return sa4;
case 5:
return sa5;
case 6:
return sa6;
}
break;
}
}
我无法判断 Switch 的行为是否与我将“As System.Windows.Forms.Label”翻译错误?希望有人能赐教。
【问题讨论】:
-
您在 VB 中应该有相同的
Not All Paths...错误 - 它无法知道您的 Case 语句是详尽无遗的。不同的是,在 VB 中它只是一个警告 -
说到筋疲力尽 - 可以通过消除 Select case 行并使用数组来折叠:
Case DayOfWeek.Monday ... Return MondayLabels(row) -
答案是肯定的,它们是不同的。因为,它们是两种完全不同的语言。生成的程序集兼容但语法不兼容。
-
您应该在 VB 中设置
Option Strict On- 您可能会在您的 VB 代码中遇到大量错误。这将帮助您正确更改为 C#。 -
@Plutonix,谢谢你的提示。我的编码技能真的不是那么好。我会把它折叠起来。