我创建了一个名为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
- 字段?
答案 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