Как сохранить ноль в 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 следуют одним и тем же правилам.