Übersetzungsproblem C# nach VB

  • VB.NET
  • .NET (FX) 4.0

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von exc-jdbi.

    Übersetzungsproblem C# nach VB

    Hallo zusammen,

    ich habe eine Feiertagsberechnung gefunden und für meine Bedürfnisse angepasst. Jetzt habe ich nur das Problem das die Berechnung in C# ist, ich sie in meinem Programm aber als VB-Code benötige.

    Fehlermeldung:
    Fehler 2 Class "Feiertag" muss "Function CompareTo(other As AgentTool.Feiertage.Feiertag) As Integer" für die System.IComparable(Of Feiertag)-Schnittstelle implementieren. Y:\Eigene Dateien\Visual Studio 2012\TeamProjekte\SDT_AT_Tool\AgentTool\Source\Klassen\Feiertage.vb

    Allerdings habe ich die CompareTo Function, es wird mir auch sonst kein Fehler angezeigt.

    VB.NET-Quellcode

    1. Public Class Feiertag : Implements IComparable(Of Feiertag) '<--- Hier wird der Fehler angezeigt
    2. Private MyDatum As DateTime
    3. ''' <summary>
    4. ''' Prüfung ob ein Tag ein Feiertag ist.
    5. ''' </summary>
    6. ''' <param name="other">Möglicher Feiertag</param>
    7. ''' <returns></returns>
    8. Public Function CompareTo(other As Feiertage.Feiertag) As Integer
    9. Return Me.MyDatum.Date.CompareTo(other.MyDatum.Date)
    10. End Function


    Hier der gesamte C# Code, der Funktiniert. (Ich habe den C#-Code in einer .dll in das VB-Projekt eingebunden.)
    Spoiler anzeigen

    C#-Quellcode

    1. using System;
    2. using System.Collections.Generic;
    3. using System.Linq;
    4. using System.Text;
    5. using System.Threading.Tasks;
    6. namespace Feiertage
    7. {
    8. public class Feiertag : IComparable<Feiertag>
    9. {
    10. private bool _isSDT;
    11. private DateTime _datum;
    12. private string _name;
    13. /// <summary>
    14. /// Eine Feiertag
    15. /// </summary>
    16. /// <param name="isSDT">Markiert ob es eine SDT-Feiertag ist</param>
    17. /// <param name="datum">Datum des Tages</param>
    18. /// <param name="name">Name oder Bezeichnung</param>
    19. public Feiertag(bool isSDT, DateTime datum, string name)
    20. {
    21. this.IsSDT = isSDT;
    22. this.Datum = datum;
    23. this.Name = name;
    24. }
    25. /// <summary>
    26. /// Beschreibung: Name des Feiertags
    27. /// </summary>
    28. public string Name
    29. {
    30. get
    31. {
    32. return _name;
    33. }
    34. set
    35. {
    36. _name = value;
    37. }
    38. }
    39. /// <summary>
    40. /// Beschreibung: Datum des Feiertags
    41. /// </summary>
    42. public DateTime Datum
    43. {
    44. get
    45. {
    46. return _datum;
    47. }
    48. set
    49. {
    50. _datum = value;
    51. }
    52. }
    53. /// <summary>
    54. /// Beschreibung: Markierung ob es ein SDT-Interner Feiertag ist.
    55. /// </summary>
    56. public bool IsSDT
    57. {
    58. get
    59. {
    60. return _isSDT;
    61. }
    62. set
    63. {
    64. _isSDT = value;
    65. }
    66. }
    67. #region IComparable<Feiertag> Member
    68. /// <summary>
    69. /// Prüfung ob ein Tag ein Feiertag ist.
    70. /// </summary>
    71. /// <param name="other">Möglicher Feiertag</param>
    72. /// <returns></returns>
    73. public int CompareTo(Feiertag other)
    74. {
    75. return this._datum.Date.CompareTo(other._datum.Date);
    76. }
    77. #endregion
    78. }
    79. public class FeiertagsUebersicht
    80. {
    81. private static FeiertagsUebersicht Instance;
    82. private List<Feiertag> feiertage;
    83. private int year;
    84. /// <summary>
    85. /// Beschreibung: Das gesuchte Jahr
    86. /// </summary>
    87. public int CurrentYear
    88. {
    89. get { return year; }
    90. set { year = value; }
    91. }
    92. /// <summary>
    93. /// erstellt eine neue Liste der Feiertage
    94. /// </summary>
    95. /// <param name="year">Angabe des Jahres</param>
    96. /// <returns></returns>
    97. public static FeiertagsUebersicht GetInstance(int year)
    98. {
    99. if (Instance == null || year != Instance.CurrentYear)
    100. {
    101. Instance = new FeiertagsUebersicht(year);
    102. return Instance;
    103. }
    104. return Instance;
    105. }
    106. /// <summary>
    107. /// Beschreibung: Gibt variable Feiertage zurueck
    108. /// </summary>
    109. public List<Feiertag> SDTFeiertag
    110. {
    111. get { return feiertage.FindAll(delegate(Feiertag f) { return f.IsSDT; }); }
    112. }
    113. /// <summary>
    114. /// Beschreibung: gibt feste Feiertage zurueck
    115. /// </summary>
    116. public List<Feiertag> NichtSDTFeiertag
    117. {
    118. get { return feiertage.FindAll(delegate(Feiertag f) { return !f.IsSDT; }); }
    119. }
    120. /// <summary>
    121. /// Beschreibung: Gibt alle Feiertage zurueck
    122. /// </summary>
    123. public List<Feiertag> AlleFeiertage
    124. {
    125. get { return feiertage.FindAll(delegate(Feiertag f) { return true; }); }
    126. }
    127. /// <summary>
    128. /// Prüft ob das Datum ein Feiertag ist.
    129. /// </summary>
    130. /// <param name="value">Datum</param>
    131. /// <returns>True/False</returns>
    132. public bool isFeiertag(DateTime value)
    133. {
    134. return (feiertage.Find(delegate(Feiertag f) { return f.Datum.Date == value.Date; }) != null);
    135. }
    136. /// <summary>
    137. /// Prüft ob der Feiertag ein SDT-Feiertag ist
    138. /// </summary>
    139. /// <param name="value">Datum</param>
    140. /// <returns>True/False</returns>
    141. public bool isSDTFeiertag(DateTime value)
    142. {
    143. return (feiertage.Find(delegate(Feiertag f) { return (f.Datum.Date == value.Date) && f.IsSDT; }) != null);
    144. }
    145. /// <summary>
    146. /// Gibt den Namen eines Feiertags zurück
    147. /// </summary>
    148. /// <param name="value">Datum</param>
    149. /// <returns>Name</returns>
    150. public Feiertag GetFeiertagName(DateTime value)
    151. {
    152. return (feiertage.Find(delegate(Feiertag f) { return f.Datum.Date == value.Date; }));
    153. }
    154. /// <summary>
    155. /// Erstellt eine neue Liste der Feiertage für das gesuchte Jahr
    156. /// </summary>
    157. /// <param name="year">Das gesuchte Jahr</param>
    158. private FeiertagsUebersicht(int year)
    159. {
    160. this.CurrentYear = year;
    161. DateTime bussundbettag = GetBussUndBettag();
    162. DateTime osterSonntag = GetOsterSonntag();
    163. #region fillList
    164. this.feiertage = new List<Feiertag>();
    165. // Feste Feiertage
    166. this.feiertage.Add(new Feiertag(true, new DateTime(year, 1, 1), ftName.Neujahr.ToString())); // "Neujahr"
    167. this.feiertage.Add(new Feiertag(false, new DateTime(year, 1, 6), ftName.HeiligeDreiKoenige.ToString())); // "Heilige drei Königs Tag"
    168. this.feiertage.Add(new Feiertag(true, new DateTime(year, 5, 1), ftName.TagDerArbeit.ToString())); // "Tag der Arbeit" / "Maifeiertag"
    169. this.feiertage.Add(new Feiertag(false, new DateTime(year, 8, 15), ftName.MariaHimmelfahrt.ToString())); // "Mariä Himmelfahrt"
    170. this.feiertage.Add(new Feiertag(false, new DateTime(year, 10, 3), ftName.TadDerDeutschenEinheit.ToString())); // "Tag der deutschen Einheit"
    171. this.feiertage.Add(new Feiertag(false, new DateTime(year, 10, 31), ftName.Reformationstag.ToString())); // "Reformationstag"
    172. this.feiertage.Add(new Feiertag(false, new DateTime(year, 11, 1), ftName.Allerheiligen.ToString())); // "Allerheiligen "
    173. this.feiertage.Add(new Feiertag(false, new DateTime(year, 12, 25), ftName.Heiligabend.ToString())); // "Heiligabend"
    174. this.feiertage.Add(new Feiertag(true, new DateTime(year, 12, 25), ftName.ErterWeihnachten.ToString())); // "1. Weihnachtstag"
    175. this.feiertage.Add(new Feiertag(true, new DateTime(year, 12, 26), ftName.ZweiterWeihnachten.ToString())); // "2. Weihnachtstag"
    176. this.feiertage.Add(new Feiertag(false, new DateTime(year, 12, 31), ftName.Silvester.ToString())); // "Silvester"
    177. // Flexible Feiertage
    178. this.feiertage.Add(new Feiertag(false, bussundbettag, ftName.BussUndBettag.ToString())); // "Buss und Bettag
    179. this.feiertage.Add(new Feiertag(true, osterSonntag, ftName.OsterSonntag.ToString())); // "Ostersonntag"
    180. this.feiertage.Add(new Feiertag(false, osterSonntag.AddDays(-3), ftName.Gruendonnerstag.ToString())); // "Gründonnerstag"
    181. this.feiertage.Add(new Feiertag(true, osterSonntag.AddDays(-2), ftName.Karfreitag.ToString())); // "Karfreitag"));
    182. this.feiertage.Add(new Feiertag(true, osterSonntag.AddDays(1), ftName.OsterMontag.ToString())); // "Ostermontag"));
    183. this.feiertage.Add(new Feiertag(false, osterSonntag.AddDays(39), ftName.ChristiHimmelfahrt.ToString())); // "Christi Himmelfahrt"
    184. this.feiertage.Add(new Feiertag(true, osterSonntag.AddDays(49), ftName.Pfingssonntag.ToString())); // "Pfingstsonntag"
    185. this.feiertage.Add(new Feiertag(false, osterSonntag.AddDays(50), ftName.Pfingstmontag.ToString())); // "Pfingstmontag"
    186. this.feiertage.Add(new Feiertag(false, osterSonntag.AddDays(60), ftName.Fronleichnam.ToString())); // "Fronleichnam"
    187. #endregion
    188. }
    189. /// <summary>
    190. /// Ermittelt das Datum des Ostersonntags (Gausformel)
    191. /// </summary>
    192. /// <returns>Datum von Ostersonntag</returns>
    193. private DateTime GetOsterSonntag()
    194. {
    195. int x = CurrentYear; // das Jahr
    196. int k; // die Säkularzahl
    197. int m; // die säkulare Mondschaltung
    198. int s; // die säkulare Sonnenschaltung
    199. int a; // der Mondparameter
    200. int d; // der Keim für den ersten Vollmond im Frühling
    201. int r; // die kalendarische Korrekturgröße
    202. int og; // die Ostergrenze
    203. int sz; // der ersten Sonntag im März
    204. int oe; // die Entfernung des Ostersonntags von der Ostergrenze
    205. int os; // das Datum des Ostersonntags als Märzdatum (32.März = 1.April)
    206. int OsterTag;
    207. int OsterMonat;
    208. k = x / 100;
    209. m = 15 + (3 * k + 3) / 4 - (8 * k + 13) / 25;
    210. s = 2 - (3 * k + 3) / 4;
    211. a = x % 19;
    212. d = (19 * a + m) % 30;
    213. r = (d + a / 11) / 29;
    214. og = 21 + d - r;
    215. sz = 7 - (x + x / 4 + s) % 7;
    216. oe = 7 - (og - sz) % 7;
    217. os = og + oe;
    218. OsterMonat = 2 + (int)(os + 30) / 31;
    219. OsterTag = os - 31 * ((int)OsterMonat / 4);
    220. return new DateTime(CurrentYear, OsterMonat, OsterTag);
    221. }
    222. /// <summary>
    223. /// Errechnet das Datum des Buß- und Bettags
    224. /// </summary>
    225. /// <returns>Das errechnete Datum des Buß- und Bettags in dem angegebenen Jahr</returns>
    226. internal DateTime GetBussUndBettag()
    227. {
    228. // Der Buß- und Bettag ist immer ein Mittwoch, er liegt zwischen dem 16. und 22. November
    229. return GetDateOfLastWeekday(new DateTime(year, 11, 22), DayOfWeek.Wednesday);
    230. }
    231. /// <summary>
    232. /// Bestimmt innerhalb der letzten 7 Tage das Datum mit dem gewünschten Wochentag.
    233. /// </summary>
    234. /// <param name="startDate">Ausgangsdatum, und zwar das letztmögliche Datum innerhalb
    235. /// des Bereichs von 7 Tagen (Beispiel: in einem Bereich Do/Fr/Sa/So/Mo/Di/Mi der Mittwoch)</param>
    236. /// <param name="targetDayOfWeek">Der gewünschte Wochentag (im Beispiel der Mittwoch)</param>
    237. /// <returns>Das Datum mit dem gewünschten Wochentag innerhalb der letzten 7 Tage.</returns>
    238. public static DateTime GetDateOfLastWeekday(DateTime startDate, DayOfWeek targetDayOfWeek)
    239. {
    240. DayOfWeek startDayOfWeek = startDate.DayOfWeek;
    241. if (startDayOfWeek == targetDayOfWeek)
    242. {
    243. return startDate;
    244. }
    245. int diff = 0;
    246. if (startDayOfWeek < targetDayOfWeek)
    247. {
    248. diff = targetDayOfWeek - startDayOfWeek - 7;
    249. }
    250. else if (startDayOfWeek > targetDayOfWeek)
    251. {
    252. diff = targetDayOfWeek - startDayOfWeek;
    253. }
    254. return startDate.AddDays(diff);
    255. }
    256. }
    257. /// <summary>
    258. /// Liste der Feiertagsnamen
    259. /// </summary>
    260. public enum ftName
    261. {
    262. Neujahr,
    263. HeiligeDreiKoenige,
    264. TagDerArbeit,
    265. MariaHimmelfahrt,
    266. TadDerDeutschenEinheit,
    267. Reformationstag,
    268. Allerheiligen,
    269. Heiligabend,
    270. ErterWeihnachten,
    271. ZweiterWeihnachten,
    272. Gruendonnerstag,
    273. Karfreitag,
    274. OsterSonntag,
    275. OsterMontag,
    276. ChristiHimmelfahrt,
    277. Pfingssonntag,
    278. Pfingstmontag,
    279. Fronleichnam,
    280. BussUndBettag,
    281. Silvester
    282. };
    283. }
    There is no CLOUD - just other people's computers

    Q: Why do JAVA developers wear glasses?
    A: Because they can't C#

    Daily prayer:
    "Dear Lord, grand me the strength not to kill any stupid people today and please grant me the ability to punch them in the face over standard TCP/IP."
    Danke! Das war es.
    There is no CLOUD - just other people's computers

    Q: Why do JAVA developers wear glasses?
    A: Because they can't C#

    Daily prayer:
    "Dear Lord, grand me the strength not to kill any stupid people today and please grant me the ability to punch them in the face over standard TCP/IP."
    Hallo @Schamash

    VB.NET-Quellcode

    1. Public Class Feiertag : Implements IComparable(Of Feiertag) '<<<Hier ENTER drücken
    2. End Class



    Sobald ENTER gedrückt wird, werden die entsprechednen Implements korrekt eingebaut. (Eventuell 2x Enter, wenn gleich text folgt)

    VB.NET-Quellcode

    1. Public Class Feiertag : Implements IComparable(Of Feiertag)
    2. '<<<Hier ENTER drücken
    3. Public Function CompareTo(ByVal other As Feiertag) As Integer Implements System.IComparable(Of Feiertag).CompareTo
    4. End Function
    5. End Class


    Implements sollten immer so gehandhabt werden, um sicher stellen, dass auch alle drin sind.


    Freundliche Grüsse

    exc-jdbi