@@ -39,7 +39,7 @@ public AlgorithmEngine()
3939 AddCSharp ( ) ;
4040 }
4141
42- #region 可重写的方法
42+ #region protected
4343
4444 protected virtual Operand GetParameter ( Operand curOpd )
4545 {
@@ -50,6 +50,11 @@ protected void AddFunction(string funName, Func<List<Operand>, Operand> function
5050 addFunc ( funName , function ) ;
5151 }
5252
53+ protected bool ContainsKey ( string key )
54+ {
55+ return tokenDict . ContainsKey ( key ) ;
56+ }
57+
5358 #endregion
5459
5560 #region Parse
@@ -836,6 +841,167 @@ public TimeSpan TryEvaluate(string exp, TimeSpan def)
836841 return def ;
837842 }
838843
844+
845+ public short TryEvaluate ( string name , string exp , short def )
846+ {
847+ if ( ContainsKey ( name ) || Parse ( name , exp ) ) {
848+ try {
849+ var obj = Evaluate ( name ) ;
850+ if ( obj is Date ) return ( short ) ( double ) ( Date ) obj ;
851+ return ( short ) ( double ) obj ;
852+ } catch ( Exception ) { }
853+ }
854+ return def ;
855+ }
856+ public int TryEvaluate ( string name , string exp , int def )
857+ {
858+ if ( ContainsKey ( name ) || Parse ( name , exp ) ) {
859+ try {
860+ var obj = Evaluate ( name ) ;
861+ if ( obj is Date ) return ( int ) ( double ) ( Date ) Evaluate ( ) ;
862+ return ( int ) ( double ) obj ;
863+ } catch ( Exception ) { }
864+ }
865+ return def ;
866+ }
867+ public long TryEvaluate ( string name , string exp , long def )
868+ {
869+ if ( ContainsKey ( name ) || Parse ( name , exp ) ) {
870+ try {
871+ var obj = Evaluate ( name ) ;
872+ if ( obj is Date ) return ( long ) ( double ) ( Date ) obj ;
873+ return ( long ) ( double ) obj ;
874+ } catch ( Exception ) {
875+ }
876+ }
877+ return def ;
878+ }
879+
880+ public ushort TryEvaluate ( string name , string exp , ushort def )
881+ {
882+ if ( ContainsKey ( name ) || Parse ( name , exp ) ) {
883+ try {
884+ var obj = Evaluate ( name ) ;
885+ if ( obj is Date ) return ( ushort ) ( double ) ( Date ) obj ;
886+ return ( ushort ) ( double ) obj ;
887+ } catch ( Exception ) {
888+ }
889+ }
890+ return def ;
891+ }
892+ public uint TryEvaluate ( string name , string exp , uint def )
893+ {
894+ if ( ContainsKey ( name ) || Parse ( name , exp ) ) {
895+ try {
896+ var obj = Evaluate ( name ) ;
897+ if ( obj is Date ) return ( uint ) ( double ) ( Date ) obj ;
898+ return ( uint ) ( double ) obj ;
899+ } catch ( Exception ) {
900+ }
901+ }
902+ return def ;
903+ }
904+ public ulong TryEvaluate ( string name , string exp , ulong def )
905+ {
906+ if ( ContainsKey ( name ) || Parse ( name , exp ) ) {
907+ try {
908+ var obj = Evaluate ( name ) ;
909+ if ( obj is Date ) return ( ulong ) ( double ) ( Date ) obj ;
910+ return ( ulong ) ( double ) obj ;
911+ } catch ( Exception ) {
912+ }
913+ }
914+ return def ;
915+ }
916+
917+ public float TryEvaluate ( string name , string exp , float def )
918+ {
919+ if ( ContainsKey ( name ) || Parse ( name , exp ) ) {
920+ try {
921+ var obj = Evaluate ( name ) ;
922+ if ( obj is Date ) return ( float ) ( double ) ( Date ) obj ;
923+ return ( float ) ( double ) obj ;
924+ } catch ( Exception ) {
925+ }
926+ }
927+ return def ;
928+ }
929+ public double TryEvaluate ( string name , string exp , double def )
930+ {
931+ if ( ContainsKey ( name ) || Parse ( name , exp ) ) {
932+ try {
933+ var obj = Evaluate ( name ) ;
934+ if ( obj is Date ) return ( double ) ( Date ) obj ;
935+ return ( double ) obj ;
936+ } catch ( Exception ) {
937+ }
938+ }
939+ return def ;
940+ }
941+
942+ public string TryEvaluate ( string name , string exp , string def )
943+ {
944+ if ( ContainsKey ( name ) || Parse ( name , exp ) ) {
945+ try {
946+ return Evaluate ( name ) . ToString ( ) ;
947+ } catch ( Exception ) {
948+ }
949+ }
950+ return def ;
951+ }
952+ public bool TryEvaluate ( string name , string exp , bool def )
953+ {
954+ if ( ContainsKey ( name ) || Parse ( name , exp ) ) {
955+ try {
956+ var obj = Evaluate ( name ) ;
957+ if ( obj is string ) {
958+ return bool . Parse ( obj . ToString ( ) ) ;
959+ }
960+ if ( obj is bool ) {
961+ return ( bool ) obj ;
962+ }
963+ if ( obj is Date ) return def ;
964+ return decimal . Parse ( obj . ToString ( ) ) != 0 ;
965+ } catch ( Exception ) {
966+ }
967+ }
968+ return def ;
969+ }
970+
971+ public DateTime TryEvaluate ( string name , string exp , DateTime def )
972+ {
973+ if ( ContainsKey ( name ) || Parse ( name , exp ) ) {
974+ try {
975+ var obj = Evaluate ( name ) ;
976+ if ( obj is string ) {
977+ if ( DateTime . TryParse ( obj . ToString ( ) , out DateTime dt ) ) {
978+ return dt ;
979+ }
980+ return def ;
981+ }
982+ return ( DateTime ) ( Date ) Evaluate ( ) ;
983+ } catch ( Exception ) { }
984+ }
985+ return def ;
986+ }
987+
988+ public TimeSpan TryEvaluate ( string name , string exp , TimeSpan def )
989+ {
990+ if ( ContainsKey ( name ) || Parse ( name , exp ) ) {
991+ try {
992+ var obj = Evaluate ( name ) ;
993+ if ( obj is string ) {
994+ if ( TimeSpan . TryParse ( obj . ToString ( ) , out TimeSpan dt ) ) {
995+ return dt ;
996+ }
997+ return def ;
998+ }
999+ return ( TimeSpan ) ( Date ) Evaluate ( ) ;
1000+ } catch ( Exception ) {
1001+ }
1002+ }
1003+ return def ;
1004+ }
8391005 #endregion
8401006
8411007 private void addFunc ( string name , Func < List < Operand > , Operand > func )
@@ -845,7 +1011,6 @@ private void addFunc(string name, Func<List<Operand>, Operand> func)
8451011 funcDict [ name ] = func ;
8461012 }
8471013
848-
8491014 private Operand doFunc ( Operator curOpt , List < Operand > ops )
8501015 {
8511016 try {
0 commit comments