从visual basic转换为c#

时间:2012-10-24 21:13:34

标签: c# vb.net

如何将此代码块(在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
           });
}

3 个答案:

答案 0 :(得分:2)

代码:

{New With {.Day = monthName}}

这是VB.NET中的一个数组 - 它是一个单个元素数组,但仍然是一个数组。所以相应的C#代码将是:

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

其余的LINQ表达式应该可以在那里工作。

答案 1 :(得分:0)

我不确定这些工具的效果如何,因为我几乎不需要这样做。但你可以尝试一下http://www.developerfusion.com/tools/convert/vb-to-csharp/

答案 2 :(得分:0)

您不需要在C#中使用Union。例如,我可以创建一个这样的匿名类型:

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

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

不完全确定这是你正在寻找的,但我希望这会有所帮助。