-1

このコードブロック(ビジュアルベーシック)を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
           });
}
4

3 に答える 3

2

コードの場合:

{New With {.Day = monthName}}

これはVB.NETの配列です。これは単一要素の配列ですが、それでも配列です。したがって、対応するC#コードは次のようになります。

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

残りのLINQ式はそこから機能するはずです。

于 2012-10-24T21:31:46.530 に答える
0

この種のことをする必要はほとんどないので、これらのツールがどれほど効果的かはわかりません。ただし、 http://www.developerfusion.com/tools/convert/vb-to-csharp/を試してみることができます。

于 2012-10-24T21:22:46.417 に答える
0

C#でUnionを使用する必要はありません。たとえば、次のような匿名タイプを作成できます。

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

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

これがあなたが探しているものであるかどうかは完全にはわかりませんが、これがお役に立てば幸いです。

于 2012-10-24T21:26:46.917 に答える