DataTables和自定义类型

时间:2009-12-01 10:42:18

标签: c# class datatable types

我创建了一个名为CustomData的类,它使用另一个名为CustomOptions的类作为其字段之一。我想在CustomData中使用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
}

因此,在使用上述内容的“实际”类中,我使用DataTable列创建typeof(CustomData)

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

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

为什么我无法访问options - 字段?

2 个答案:

答案 0 :(得分:3)

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

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

修改 如果要处理 NULL 值,则应使用:

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 );

答案 1 :(得分:1)

您需要将其转换为CustomData类型。

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