如何在使用Expando对象时获得可空类型

本文关键字:类型 对象 Expando | 更新日期: 2023-09-27 18:10:18

我有dynamic类型的集合。我已经在集合中存储了双精度值。对于一些记录,我不将数据存储到它。现在我需要把这个类型变成nullable double来执行一些操作。在使用Expando对象时,是否有办法获得数据属性类型为nullable ?

ObservableCollection<dynamic> dynamicItems = new ObservableCollection<dynamic>();
for (int j = 1; j <= 4; j++)
{
    dynamic data = new ExpandoObject();
    if (j == 2)
    {
        // not store the value when j is 2.
    }
    else
    {
        data.colValues = 12.2 * j;                  
    }
    dynamicItems.Add(data);
}

如何在使用Expando对象时获得可空类型

您可以尝试转换为Double?,然后检查colValues == null:

   ...
   if (j == 2)
   {
        // not store the value when j is 2.
       data.colValues = new Nullable<Double>(); // or (Double?) null;
   }
   else
   {
       data.colValues = (Double?) (12.2 * j);                  
   }
   ...
   // if colValues exists
   if (null != data.colValues) {
     Double v = data.colValues;
     ... 
   }

另一种方法是什么都不做,然后检查字段(即colValues) 是否存在,但是,IMHO,这不是很好的实现:

   if (j == 2)
   {
        // not store the value when j is 2. - literally do nothing
   }
   else
   {
       data.colValues = 12.2 * j;                  
   }
   ... 
   // if colValues exists
   if ((data as IDictionary<String, Object>).ContainsKey("colValues")) {
     Double v = data.colValues; // or var v = data.colValues;
     ... 
   }