代码之家  ›  专栏  ›  技术社区  ›  F.P

数据表和自定义类型

  •  0
  • F.P  · 技术社区  · 15 年前

    我创建了一个名为 CustomData 用另一个叫 CustomOptions 作为它的一个领域。我想用 客户数据 在一个 DataTable 作为价值。下面是一个简短的概述( 简化,字段是 private 和存取器 public ,主要是只读的 set 由自定义方法完成 ;

    enum CustomDataOptionType
    {
     // Some values, not important
    }
    
    class CustomOptions
    {
     public CustomDataOptionType type { get; }
     public Dictionary<string, string> values { get; }
     // Some Methods to set the values
    }
    
    class CustomData
    {
     public CustomOptions options { get; }
     // Some Methods to set the options
    }
    

    因此,在使用上面的类的“实际”类中,我创建了一个 数据表 ,使用以下列 typeof(CustomData) .

    但是当我试图访问列时,例如

    DataRow Row = data.Rows.Find("bla");
    Row["colmn1"].options; // Not possible
    

    为什么我不能访问 options -字段?

    2 回复  |  直到 15 年前
        1
  •  3
  •   TcKs    15 年前

    因为 Row["column1"] returns “对象”。 您需要将值强制转换为您的类型:

    ((CustomData)Row["column1"]).Options.
    

    编辑: 如果你想处理 无效的 值,您应该使用:

    CustomData data = Row["column1"] as CustomData;
    if ( null != data ) {
        // do what you want
    }
    

    或者您可以使用扩展方法来简化它:

    public static DataRowExtensionsMethods {
        public static void ForNotNull<T>( this DataRow row, string columnName, Action<T> action ) {
            object rowValue = row[columnName];
            if ( rowValue is T ) {
                action( (T)rowValue );
            }
        }
    }
    // somewhere else
    Row.ForNotNull<CustomData>( "column1", cutomData => this.textBox1.Text = customData.Username );
    
        2
  •  1
  •   o.k.w    15 年前

    你需要把它转换成 CustomData .

    ((CustomData)Row["colmn1"]).options