2016-10-30 3 views
0

Ich bin damit fertig, diese Funktion von c in C# umzuwandeln, aber ich bin völlig verloren, was die mittlere Rechenzeile tut.Wie konvertiere ich diese Funktion von C nach C#?

  y -= m < 3; 

C Version

int DayOfWeek(int d, int m, int y) 
     { 
      static int t[] = { 0, 3, 2, 5, 0, 3, 5, 1, 4, 6, 2, 4 }; 
      y -= m < 3; 
      return (y + y/4 - y/100 + y/400 + t[m - 1] + d) % 7; 
     } 

C# Version

int DayOfWeek(int d, int m, int y) 
     { 
      int[] t = { 0, 3, 2, 5, 0, 3, 5, 1, 4, 6, 2, 4 }; 
      y -= m < 3; 
      return (y + y/4 - y/100 + y/400 + t[m - 1] + d) % 7; 
     } 

1) Ich verstehe y - = m entspricht y = y - m aber was bedeutet "<" tun? Ist es ein Ausdruck? 2) Wie konvertiere ich den Rest davon in C#?

Vielen Dank an alle, zur Klarstellung ist dies für einen Studiengang.

+0

Du weißt, dass C# einen sehr zuverlässigen Datetime-Typen hat, nicht wahr? –

+3

In C wird 'm <3 'zu' 0 'oder' 1 'ausgewertet. Die Zeile "y - = m <3;" ist äquivalent zu "if (m <3) {y--; } ' –

+0

Sie können' Convert.ToInt32 (m <3) ' –

Antwort

1
y -= (m < 3) ? 1 : 0; 

oder mehr readibly

if (m < 3) y -= 1; 

oder sogar

if (m < 3) --y; 

Es ist einig C-Code unter Verwendung der Tatsache, dass conditionals 1 oder 0 als Wert zurück. Fix wie gezeigt.

Edit: Ich sehe jetzt die Kommentare sagen, dass dieser Code verschleiert ist. Ich denke, ich bin so ein alter C-Hut, ich fand es sofort offensichtlich beim Lesen, nicht, dass ich empfehle, es so zu schreiben.

Oder wir können das tun die wirklich ovbious Weg:

int DayOfWeek(int d, int m, int y) => (new DateTime(y, m, d)).DayOfWeek; 
+0

Ah so das gleiche wie ein ternärer Operator in PHP! Vielen Dank. – NightOwl4Life

1

ich mit C# Syntax nicht vertraut bin, aber in C

m < 3 

ausgewertet 0 oder 1. Die Linie

y -= m < 3; 

entspricht

if(m < 3) { y--; } 
1
int DayOfWeek(int d, int m, int y) 
{ 
    var dt = new DateTime(y,m,d); 
    return (int) dt.DayOfWeek; 
} 
+0

Dupe! (Ich würde lieber eine private Nachricht verwenden, aber es existiert nicht) – Joshua

Verwandte Themen