2017-01-30 37 views
2

В настоящее время я пытаюсь преобразовать раздел моего кода vb.net в C#, но я не могу получить синтаксис правильно.DateTime.Compare in C#

мой vb.net код

Private Sub board(days As Integer, name As String) 

Dim dcount As Integer = 0 
Dim counter As Integer = 0 


    If My.Computer.FileSystem.FileExists("pathway" + name) AndAlso Not File.ReadAllText("pathway" + name).Length = 0 Then 

     Dim d As List(Of String) = File.ReadAllLines("pathway" + name).ToList 
     Dim line As String = d(0) 

     While counter <> d.Count 
      line = d(counter) 


      If DateTime.Compare(line.Substring(0, line.LastIndexOf(",")), Now.AddDays(days).ToString("MM/dd/yyyy")) < 0 Then 
       dcount += 0 
       counter += 1 
      Else 
       dcount += 1 
       counter += 1 

      End If 
     End While 
    End If 

код vb.net работает нормально, но мой с # ниже дает мне ошибку:

< оператора 'не может быть применен к операндам типа «строка 'и 'INT'

линия ошибка на это:

if (DateTime.Compare(line.Substring(0, line.LastIndexOf(",")), DateTime.Now.AddDays(days).ToString("MM/dd/yyyy") < 0)) { 

весь раздел ниже

private void board(int days, string name){ 


int dcount = 0; 
     int counter = 0; 

if (File.Exists(@"pathway" + name) && File.ReadAllText(@"pathway" + name).Length != 0) 
     { 
      List<string> d = File.ReadAllLines(@"pathway" + name).ToList(); 
      string line = d[0]; 

      while (counter != d.Count) 
      { 
       line = d[counter]; 
       // compares the current date to the amount of days you put in the days integer 
       if (DateTime.Compare(line.Substring(0, line.LastIndexOf(","), DateTime.Now.AddDays(days).ToString("MM/dd/yyyy") < 0) { 
        counter++; 
       } else 
       { 
        dcount++; 
        counter++; 
       } 
      } 
     } 
} 

Я признателен за любую помощь вы, ребята, могли бы дать мне

+0

код, который вы предоставили, даже не синтаксически не соответствует. Линия с ошибкой пропускает хотя бы одну закрывающую скобку ... я думаю, после 'line.LastIndexOf (", ")' –

+0

также предоставит пример 'line', пожалуйста. –

+0

Попробуйте это 'if (DateTime.Compare (DateTime.Parse (строка.Substring (0, line.LastIndexOf (", "))), DateTime.Now.AddDays (days)) <0)'. Не знаю, будет ли это работать на ваши данные, но мы не знаем, что это за линия. – Kolichikov

ответ

4

DateTime.Compare могут быть использованы только для сравнения DateTime объектов.

В VB.NET существует неявное преобразование типа, но в C# вы должны быть явным.

Вместо

if (DateTime.Compare(line.Substring(0, line.LastIndexOf(",")), DateTime.Now.AddDays(days).ToString("MM/dd/yyyy") < 0)) 
{ 
    //Do something 
} 

вам нужно будет написать что-то вроде

var d1 = DateTime.Parse(line.Substring(0, line.LastIndexOf(",")); 
var d2 = DateTime.Now.AddDays(days); 
if (DateTime.Compare(d1, d2) < 0) 
{ 
    //Do something 
} 

Если вы действительно хотите все это на одной линии, вы можете сделать это, но это может быть прикосновение трудно читать:

if (DateTime.Compare(DateTime.Parse(line.Substring(0, line.LastIndexOf(",")), DateTime.Now.AddDays(days) < 0) 
{ 
    //Do something 
} 
+0

Хороший ответ. Как добавить: почему оригинальный плакат использует DateTime.Compare? Меньше ("<") работает нормально. – ChiralMichael

+1

Благодарим за ответ! И что вы подразумеваете под этим @ChiralMichael? – jdwee

+1

Я имею в виду, используйте 'if (d1 ChiralMichael