Как сохранить ноль в system.array - C#?

Я получил первый ряд листа Excel со следующим кодом.

Excel.Range firstRow = ws.UsedRange.Rows[1];
var row = (System.Array) firstRow.Cells.Value;
List<object> Array = row.OfType<object>().ToList();

row состоит из нулевых значений.

Например.

Проблема в том, что когда он преобразуется в список, все нулевые значения теряются.(После этого заявления)

 List<object> Array = row.OfType<object>().ToList();

Например.

Есть идеи, как этого избежать?

1 ответ

Решение

Смотря на то, что вы делаете Cast было бы более подходящим, чем OfType,

List<object> Array = myvalues.Cast<object>().ToList();

Это должно делать то, что вы хотите, и просто сказать, что все объекты должны быть приведены к типу объекта. Это сохранит ноль.

Причина разницы в том, что OfType делает проверку для current is TResult перед возвратом отлитого предмета и конечно null is object вернет false и, таким образом, он будет отброшен. Следствием этого, конечно, является то, что Cast может выбрасывать исключения при неправильном использовании (например, Cast<int> на приведенном выше примере будет бросить InvalidCastException в то время как OfType<int> просто вернет предметы, которые могут быть брошены в броню.

От: CAST И OFTYPE

Есть один важный случай, чтобы рассмотреть, где Cast будет успешно возвращать значение, а OfType будет игнорировать его: нулевые ссылки (с обнуляемым типом возврата). В обычном коде вы можете привести нулевую ссылку к любому типу, допускающему значение NULL (независимо от того, является ли он ссылочным типом или типом значения NULL). Однако, если вы используете оператор "is" C# со значением NULL, он всегда будет возвращать false. В основном, Cast и OfType следуют одним и тем же правилам.

Другие вопросы по тегам