从Visual Basic转换为C#

问题描述:

你怎么翻译这个代码块(在Visual Basic中)到C#从Visual Basic转换为C#

For m = 1 To 12 
    Dim daysInMonth = curCulture.Calendar.GetDaysInMonth(year, m) 
    Dim firstMonthDate = New Date(year, m, 1) 
    Dim daysBefore = (7 + (firstMonthDate.DayOfWeek - firstYearDate.DayOfWeek)) Mod 7 
    Dim daysBehind = (tblCalendar.Columns.Count - 2) - (daysBefore + daysInMonth) - 1 
    Dim monthDays = From d In Enumerable.Range(1, daysInMonth) Select New With {.Day = d.ToString} 
    Dim emptyDaysBefore = From d In Enumerable.Range(1, daysBefore) Select New With {.Day = ""} 
    Dim emptyDaysAfter = From d In Enumerable.Range(1, daysBehind) Select New With {.Day = ""} 
    Dim montos = From d In Enumerable.Range(1, 2) Select New With {.Day = "0"} 
    Dim monthName = curCulture.DateTimeFormat.GetMonthName(m) 
    Dim allFields = ({New With {.Day = monthName}}. 
        Union(emptyDaysBefore). 
        Union(monthDays). 
        Union(emptyDaysAfter). 
        Union(montos). 
        Select(Function(d) d.Day) 
        ).ToArray 
    tblCalendar.Rows.Add(allFields) 
    Next 

我找不到工会法简单地这样做:

for (int _m = 1 ; _m <= 12; _m++) { 
    int _daysInMonth = _currentCulture.Calendar.GetDaysInMonth(_selYear, _m); 
    DateTime _firstMonthDate = new DateTime(_selYear, _m, 1); 
    int _daysBefore = (7 + (_firstMonthDate.DayOfWeek - _firstDateOfYear.DayOfWeek)) % 7; 
    int _daysBehind = (_tableCalendar.Columns.Count) - (_daysBefore + _daysInMonth) - 1; 
    var _monthDays = from d in Enumerable.Range(1, _daysInMonth) select new { Day = d.ToString() }; 
    var _emptyDaysBefore = from d in Enumerable.Range(1, _daysBefore) select new { Day = "" }; 
    var _emptyDaysAfter = from d in Enumerable.Range(1, _daysBehind) select new { Day = "" }; 
    string _monthName = _currentCulture.DateTimeFormat.GetMonthName(_m); 

    var _allFields = (new { 
       Day = _monthDays 
      }); 
} 

对于代码:

{New With {.Day = monthName}} 

这是VB.NET阵列 - 这是一个单一元件阵列,但仍然阵列。所以相应的C#代码将是:

new[] { new { Day = monthName } }; 

您的其他LINQ表达式应该从那里工作。

我不确定这些工具有多有效,因为我几乎不必做这种事情。但你可以试一试http://www.developerfusion.com/tools/convert/vb-to-csharp/

+0

像这样的翻译工具很少成功,甚至当他们经常产生几乎不可读的代码时。 –

+0

我对Telerik的转换器有相当不错的运气 - [http://converter.telerik.com/](http://converter.telerik.com/)。不完美,但似乎比我用过的大多数都好。 –

你不需要在C#中使用Union。举例来说,我可以这样创建一个匿名类型:

var anon = new {someString = "S", someInt = someLocalIntValue, myCustomClass = this}; 

http://msdn.microsoft.com/en-us/library/bb384061.aspx

不能完全确定这就是你要找的是什么,但我希望这会有所帮助。