如何在system.array中保留null – 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(); 

例如。 在这里输入图像说明

任何想法如何防止这种情况发生?

从看你在做什么CastOfType更合适。

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

这应该做你想要的,基本上只是告诉它,所有的对象应该被转换成types的对象。 这将保留null。

不同的原因current is TResult在返回cast对象之前检查current is TResult ,当然null is object将返回false,因此它被丢弃。 当然,如果错误使用, Cast可以抛出exception(例如,上面示例中的Cast<int>将抛出InvalidCastExceptionOfType<int>只会返回可以抛出的项。

来自: CAST和OFTYPE

有一个重要的案例要考虑Cast将成功返回一个值,OfType将忽略它:null引用(带有可为空的返回types)。 在普通代码中,可以对任何可空types(无论是引用types还是可为空值types)强制使用null引用。 但是,如果使用带有空值的“is”C#运算符,则它将始终返回false。 Cast和OfType基本上遵循相同的规则。