Определите, является ли объект DateTime, а не нулевым, как условие в троичной - PullRequest
1 голос
/ 07 апреля 2020

У меня есть массив объектов:

object [] myArray

Этот массив может содержать типы данных int, string, DateTime и т. Д.

Теперь я пытаюсь проверить, имеет ли объект в myArray тип DateTime и не ноль, поэтому я выполняю ниже троичного:

string strDate = myArray[pos] != null && myArray[pos].GetType() is typeof(DateTime) ? Convert.ToDateTime(myArray[pos]).ToString("dd/MM/yyyy") : string.Empty;

Но я получаю ошибку ниже, начиная с typeof (DateTime):

В качестве оператора могут использоваться только выражения присваивания, вызова, приращения, уменьшения, ожидания и новых объектов

Ответы [ 3 ]

3 голосов
/ 07 апреля 2020

Можно использовать оператор is, например

Решение с функцией сопоставления с шаблоном C # 7

string strDate = (myArray[pos] is DateTime date) ? date.ToString("dd/MM/yyyy"): string.Empty;
1 голос
/ 07 апреля 2020

Приведенный ниже подход будет работать на старых C# компиляторах. Я настоятельно рекомендую перейти на VS 2019, хотя. Ваша жизнь станет намного легче ...

var bob = myArray[pos] as DateTime?;
string strDate = bob == null ? string.Empty : bob.Value.ToString("dd/MM/yyyy");
0 голосов
/ 07 апреля 2020

Вам не нужно звонить на Convert.ToDateTime, так как вы уже сделали проверку, чтобы убедиться, что объект является DateTime. Кроме того, вместо использования троичного оператора вы можете использовать новое выражение switch вместе с некоторым сопоставлением с шаблоном:

string stDate = myArray[pos] switch
{
    DateTime d => d.ToString("dd/MM/yyyy"),
    _          => string.Empty
};
...