object GetLiteralValue(Expression node)
{
switch (node.NodeType)
{
case NodeType.CastExpression:
return GetLiteralValue(((CastExpression) node).Target);
case NodeType.BoolLiteralExpression:
return ((BoolLiteralExpression) node).Value;
case NodeType.IntegerLiteralExpression:
return ((IntegerLiteralExpression) node).Value;
case NodeType.DoubleLiteralExpression:
return ((DoubleLiteralExpression) node).Value;
case NodeType.MemberReferenceExpression:
{
IField field = node.Entity as IField;
if (null != field && field.IsLiteral)
{
if (field.Type.IsEnum)
{
object o = field.StaticValue;
if (null != o && o != Error.Default)
return o;
}
else
{
Expression e = field.StaticValue as Expression;
return (null != e)
? GetLiteralValue(e)
: field.StaticValue;
}
}
break;
}
}
return null;
}