I가 다음의 식숫자가 포함 된 ConstantExpression이 음수인지 확인하는 방법이 있습니까?
int someNumber = somevalue;
ConstantExpression expr = Expression.Constant(someNumber);
0 또는 expr이 음수 < expr에 있는지 확인하는 방법이 있나요?
I가 다음의 식숫자가 포함 된 ConstantExpression이 음수인지 확인하는 방법이 있습니까?
int someNumber = somevalue;
ConstantExpression expr = Expression.Constant(someNumber);
0 또는 expr이 음수 < expr에 있는지 확인하는 방법이 있나요?
상수의 형식을 알고있는 경우 기본 상수 값을 단순히 캐스팅하고 분석 할 수 있습니다. 당신은 모두가 Expression
경우
ConstantExpression expr = /* ... */;
var intConstant = expr.Value as int?;
if (intConstant < 0) { /* do something */ }
물론, 당신은 그것을 이ConstantExpression
여부를 확인하는 방법을 검사해야합니다.
당신은 유형을 알고하지 않습니다,하지만 당신은 유효한 숫자 유형 확인하려면 다음
public static Type GetNonNullableType([NotNull] this Type type)
{
if (type == null)
throw new ArgumentNullException("type");
if (!type.IsGenericType || type.GetGenericTypeDefinition() != typeof(Nullable<>))
return type;
return type.GetGenericArguments()[0];
}
public static bool IsNumericType(this Type type)
{
if (type == null)
throw new ArgumentNullException("type");
type = type.GetNonNullableType();
if (type.IsEnum)
return false;
switch (Type.GetTypeCode(type))
{
case TypeCode.SByte:
case TypeCode.Byte:
case TypeCode.Int16:
case TypeCode.UInt16:
case TypeCode.Int32:
case TypeCode.UInt32:
case TypeCode.Int64:
case TypeCode.UInt64:
case TypeCode.Single:
case TypeCode.Double:
case TypeCode.Decimal:
return true;
}
return false;
}
에서 직접이 경우'as '를 사용하지 않을 것입니다. 값의 유형이 다른 경우 즉시 예외가 발생하기를 원할 것입니다. – svick
OP가 바람직한 행동이나 유효한 입력으로 간주하는 것에 대해서는 전제하지 않습니다. 그는 음수를 분리하는 법을 물었습니다. 그는 모든 가치가 숫자 일 필요는 없다고 말했습니다. 예기치 않은 값을 확인하고 처리하는 방법을 가장 잘 결정하기 위해 그에게 맡깁니다. –
이 빌드 하시겠습니까 : 두 번째 예에서 사용 된
확장 방법을 이 비교를 수행하는 _expression_ 또는 C# 코드에서 상수 값을 직접 분석하기를 원하십니까? –
이 ConstantExpression에 숫자 값이 들어 있는지 (10 진수, int 또는 double과 같은) 분석하고 해당 값이 음수인지 확인하고 싶습니다. – fahadash
예,하지만 C# 코드에서 직접이 분석을 수행 하시겠습니까? 아니면 해당 논리를 수행하는 표현식 트리를 작성 하시겠습니까? –