【优化】cfg 从excel中读取可空变量值时,如果单元格为空,则取null,而不是false,0之类。
【优化】cfg excel格式支持空单元格表示vector{2,3,4}类型的默认值
main
parent
216bdee29d
commit
36be33dea8
|
|
@ -44,16 +44,17 @@ namespace Luban.Job.Cfg.DataCreators
|
||||||
|
|
||||||
private bool CheckNull(bool nullable, object o)
|
private bool CheckNull(bool nullable, object o)
|
||||||
{
|
{
|
||||||
if (o is string s && s == "null")
|
return nullable && (o == null || (o is string s && s == "null"));
|
||||||
|
}
|
||||||
|
|
||||||
|
private bool CheckIsDefault(bool namedMode, object value)
|
||||||
|
{
|
||||||
|
if (namedMode)
|
||||||
{
|
{
|
||||||
if (nullable)
|
if (value == null || (value is string s && string.IsNullOrEmpty(s)))
|
||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
throw new InvalidExcelDataException($"单元格没有填有效数据");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
@ -75,18 +76,6 @@ namespace Luban.Job.Cfg.DataCreators
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private bool CheckIsDefault(bool namedMode, object value)
|
|
||||||
{
|
|
||||||
if (namedMode)
|
|
||||||
{
|
|
||||||
if (value == null || (value is string s && string.IsNullOrEmpty(s)))
|
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
public DType Accept(TBool type, object converter, ExcelStream x, DefAssembly ass)
|
public DType Accept(TBool type, object converter, ExcelStream x, DefAssembly ass)
|
||||||
{
|
{
|
||||||
if (x.NamedMode && x.IncludeNullAndEmptySize != 1)
|
if (x.NamedMode && x.IncludeNullAndEmptySize != 1)
|
||||||
|
|
@ -338,7 +327,11 @@ namespace Luban.Job.Cfg.DataCreators
|
||||||
|
|
||||||
public DType Accept(TEnum type, object converter, ExcelStream x, DefAssembly ass)
|
public DType Accept(TEnum type, object converter, ExcelStream x, DefAssembly ass)
|
||||||
{
|
{
|
||||||
var d = x.Read();
|
var d = x.Read(x.NamedMode);
|
||||||
|
if (CheckNull(type.IsNullable, d))
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
if (CheckNull(type.IsNullable, d))
|
if (CheckNull(type.IsNullable, d))
|
||||||
{
|
{
|
||||||
return null;
|
return null;
|
||||||
|
|
@ -541,31 +534,55 @@ namespace Luban.Job.Cfg.DataCreators
|
||||||
|
|
||||||
public DType Accept(TVector2 type, object converter, ExcelStream x, DefAssembly ass)
|
public DType Accept(TVector2 type, object converter, ExcelStream x, DefAssembly ass)
|
||||||
{
|
{
|
||||||
var d = x.Read();
|
if (x.NamedMode && x.IncludeNullAndEmptySize != 1)
|
||||||
|
{
|
||||||
|
throw new InvalidExcelDataException("在标题头对应模式下必须正好占据1个单元格");
|
||||||
|
}
|
||||||
|
var d = x.Read(x.NamedMode);
|
||||||
if (CheckNull(type.IsNullable, d))
|
if (CheckNull(type.IsNullable, d))
|
||||||
{
|
{
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
if (CheckIsDefault(x.NamedMode, d))
|
||||||
|
{
|
||||||
|
return DVector2.Default;
|
||||||
|
}
|
||||||
return DataUtil.CreateVector(type, d.ToString());
|
return DataUtil.CreateVector(type, d.ToString());
|
||||||
}
|
}
|
||||||
|
|
||||||
public DType Accept(TVector3 type, object converter, ExcelStream x, DefAssembly ass)
|
public DType Accept(TVector3 type, object converter, ExcelStream x, DefAssembly ass)
|
||||||
{
|
{
|
||||||
var d = x.Read();
|
if (x.NamedMode && x.IncludeNullAndEmptySize != 1)
|
||||||
|
{
|
||||||
|
throw new InvalidExcelDataException("在标题头对应模式下必须正好占据1个单元格");
|
||||||
|
}
|
||||||
|
var d = x.Read(x.NamedMode);
|
||||||
if (CheckNull(type.IsNullable, d))
|
if (CheckNull(type.IsNullable, d))
|
||||||
{
|
{
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
if (CheckIsDefault(x.NamedMode, d))
|
||||||
|
{
|
||||||
|
return DVector3.Default;
|
||||||
|
}
|
||||||
return DataUtil.CreateVector(type, d.ToString());
|
return DataUtil.CreateVector(type, d.ToString());
|
||||||
}
|
}
|
||||||
|
|
||||||
public DType Accept(TVector4 type, object converter, ExcelStream x, DefAssembly ass)
|
public DType Accept(TVector4 type, object converter, ExcelStream x, DefAssembly ass)
|
||||||
{
|
{
|
||||||
var d = x.Read();
|
if (x.NamedMode && x.IncludeNullAndEmptySize != 1)
|
||||||
|
{
|
||||||
|
throw new InvalidExcelDataException("在标题头对应模式下必须正好占据1个单元格");
|
||||||
|
}
|
||||||
|
var d = x.Read(x.NamedMode);
|
||||||
if (CheckNull(type.IsNullable, d))
|
if (CheckNull(type.IsNullable, d))
|
||||||
{
|
{
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
if (CheckIsDefault(x.NamedMode, d))
|
||||||
|
{
|
||||||
|
return DVector4.Default;
|
||||||
|
}
|
||||||
return DataUtil.CreateVector(type, d.ToString());
|
return DataUtil.CreateVector(type, d.ToString());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -120,14 +120,6 @@ namespace Luban.Job.Cfg.DataCreators
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
list.Add(f.CType.Apply(this, row.GetSubTitleNamedRow(fname), f.IsMultiRow, f.IsNullable));
|
list.Add(f.CType.Apply(this, row.GetSubTitleNamedRow(fname), f.IsMultiRow, f.IsNullable));
|
||||||
//if (f.IsMultiRow)
|
|
||||||
//{
|
|
||||||
// list.Add(f.CType.Apply(this, row.GetSubTitleNamedRowOfMultiRows(fname), f.IsMultiRow, f.IsNullable));
|
|
||||||
//}
|
|
||||||
//else
|
|
||||||
//{
|
|
||||||
// list.Add(f.CType.Apply(this, row.GetSubTitleNamedRow(fname), f.IsMultiRow /* 肯定是 false */, f.IsNullable));
|
|
||||||
//}
|
|
||||||
}
|
}
|
||||||
catch (DataCreateException dce)
|
catch (DataCreateException dce)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,8 @@ namespace Luban.Job.Cfg.Datas
|
||||||
{
|
{
|
||||||
public class DVector2 : DType<Vector2>
|
public class DVector2 : DType<Vector2>
|
||||||
{
|
{
|
||||||
|
public static DVector2 Default { get; } = new DVector2(default);
|
||||||
|
|
||||||
public DVector2(Vector2 x) : base(x)
|
public DVector2(Vector2 x) : base(x)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,8 @@ namespace Luban.Job.Cfg.Datas
|
||||||
{
|
{
|
||||||
public class DVector3 : DType<Vector3>
|
public class DVector3 : DType<Vector3>
|
||||||
{
|
{
|
||||||
|
public static DVector3 Default { get; } = new DVector3(default);
|
||||||
|
|
||||||
public DVector3(Vector3 x) : base(x)
|
public DVector3(Vector3 x) : base(x)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,8 @@ namespace Luban.Job.Cfg.Datas
|
||||||
{
|
{
|
||||||
public class DVector4 : DType<Vector4>
|
public class DVector4 : DType<Vector4>
|
||||||
{
|
{
|
||||||
|
public static DVector4 Default { get; } = new DVector4(default);
|
||||||
|
|
||||||
public DVector4(Vector4 x) : base(x)
|
public DVector4(Vector4 x) : base(x)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -40,17 +40,17 @@ namespace Luban.Job.Cfg.TypeVisitors
|
||||||
|
|
||||||
public override bool Accept(TVector2 type)
|
public override bool Accept(TVector2 type)
|
||||||
{
|
{
|
||||||
return true;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override bool Accept(TVector3 type)
|
public override bool Accept(TVector3 type)
|
||||||
{
|
{
|
||||||
return true;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override bool Accept(TVector4 type)
|
public override bool Accept(TVector4 type)
|
||||||
{
|
{
|
||||||
return true;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue