eedalong/Apache-IoTDB-Client-CSharp

关于Field和RowRecord的封装建议

Closed this issue · 6 comments

Field建议1:
private object value 或 private dynamic value;
// 代替 long_value, int_value,str_value...
// 因为long ,int, float, bool 都是值类型,即便没有set 也会有默认值,建议用一个变量存储

Field建议2:
public double get_double() => type == TSDataType.TEXT ? double.Parse(value) : (double)value;
// 内部增加类型兼容转换,
// 即便是TSDataType是INT32, 也能让外部调用通过double读取
// 最好方式是让 get() 方法能够类型兼容转换T
// TSDataType.TEXT 的存在本身就是缺陷,从而导致了 select last 都成了TEXT,
// 而每个Field允许有独立的TSDataType,却不能把select last 转为对应的数据类型

RowRecord建议3:
缺少对field_lst的访问能力
public Field this[int index]=>this.field_lst[index];
// 增加索引访问,如果能支持name索引就更好了
// RowRecord.FieldNames,在初始化是传入SessionDataSet.column_name_lst是同一个内存引用,不会造成多少额外开销

RowRecord建议4:
public DateTime Timestamp => new DateTime(1970, 1, 1, 8, 0, 0).AddMilliseconds(timestamp);
// 增加日期类型的timestamp访问,timezone最好能够使用Session.zoneId

@eedalong

RowRecord里line:7,8

private long timestamp{get;set;}

private List field_lst{get;set;}

你把timestamp 和 field_lst弄成private别人都访问不了是要闹哪样
改成public吧,不然没法用

@eedalong

RowRecord里line:7,8

private long timestamp{get;set;}

private List field_lst{get;set;}

你把timestamp 和 field_lst弄成private别人都访问不了是要闹哪样
改成public吧,不然没法用

好的,感谢建议!

Field建议1:
private object value 或 private dynamic value;
// 代替 long_value, int_value,str_value...
// 因为long ,int, float, bool 都是值类型,即便没有set 也会有默认值,建议用一个变量存储

Field建议2:
public double get_double() => type == TSDataType.TEXT ? double.Parse(value) : (double)value;
// 内部增加类型兼容转换,
// 即便是TSDataType是INT32, 也能让外部调用通过double读取
// 最好方式是让 get() 方法能够类型兼容转换T
// TSDataType.TEXT 的存在本身就是缺陷,从而导致了 select last 都成了TEXT,
// 而每个Field允许有独立的TSDataType,却不能把select last 转为对应的数据类型

RowRecord建议3:
缺少对field_lst的访问能力
public Field this[int index]=>this.field_lst[index];
// 增加索引访问,如果能支持name索引就更好了
// RowRecord.FieldNames,在初始化是传入SessionDataSet.column_name_lst是同一个内存引用,不会造成多少额外开销

RowRecord建议4:
public DateTime Timestamp => new DateTime(1970, 1, 1, 8, 0, 0).AddMilliseconds(timestamp);
// 增加日期类型的timestamp访问,timezone最好能够使用Session.zoneId

感谢建议,下一版本更新我们会上这部分改进!

@herowzz 欢迎加入微信用户群参与需求讨论与问题反馈!
image

@eedalong

RowRecord里line:7,8

private long timestamp{get;set;}

private List field_lst{get;set;}

你把timestamp 和 field_lst弄成private别人都访问不了是要闹哪样
改成public吧,不然没法用

最新的Release版本中已经成为public~,感谢建议!

新版本中包含上述的优化,就关闭这个issue了~