如何在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();
例如。
任何想法如何防止这种情况发生?
从看你在做什么Cast
比OfType
更合适。
List<object> Array = myvalues.Cast<object>().ToList();
这应该做你想要的,基本上只是告诉它,所有的对象应该被转换成types的对象。 这将保留null。
不同的原因current is TResult
在返回cast对象之前检查current is TResult
,当然null is object
将返回false,因此它被丢弃。 当然,如果错误使用, Cast
可以抛出exception(例如,上面示例中的Cast<int>
将抛出InvalidCastException
而OfType<int>
只会返回可以抛出的项。
来自: CAST和OFTYPE
有一个重要的案例要考虑Cast将成功返回一个值,OfType将忽略它:null引用(带有可为空的返回types)。 在普通代码中,可以对任何可空types(无论是引用types还是可为空值types)强制使用null引用。 但是,如果使用带有空值的“is”C#运算符,则它将始终返回false。 Cast和OfType基本上遵循相同的规则。