Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches

◆ Coalesce() [2/2]

static BinaryExpression System.Linq.Expressions.Expression< TDelegate >.Coalesce ( Expression< TDelegate > left,
Expression< TDelegate > right,
LambdaExpression< TDelegate >? conversion )
inlinestaticinherited

Definition at line 1271 of file Expression.cs.

1272 {
1273 ExpressionUtils.RequiresCanRead(left, "left");
1274 ExpressionUtils.RequiresCanRead(right, "right");
1275 if (conversion == null)
1276 {
1277 Type type = ValidateCoalesceArgTypes(left.Type, right.Type);
1278 return new SimpleBinaryExpression(ExpressionType.Coalesce, left, right, type);
1279 }
1280 if (left.Type.IsValueType && !left.Type.IsNullableType())
1281 {
1282 throw Error.CoalesceUsedOnNonNullType();
1283 }
1284 Type type2 = conversion.Type;
1285 MethodInfo invokeMethod = type2.GetInvokeMethod();
1286 if (invokeMethod.ReturnType == typeof(void))
1287 {
1288 throw Error.UserDefinedOperatorMustNotBeVoid(conversion, "conversion");
1289 }
1290 ParameterInfo[] parametersCached = invokeMethod.GetParametersCached();
1291 if (parametersCached.Length != 1)
1292 {
1293 throw Error.IncorrectNumberOfMethodCallArguments(conversion, "conversion");
1294 }
1295 if (!TypeUtils.AreEquivalent(invokeMethod.ReturnType, right.Type))
1296 {
1297 throw Error.OperandTypesDoNotMatchParameters(ExpressionType.Coalesce, conversion.ToString());
1298 }
1299 if (!ParameterIsAssignable(parametersCached[0], left.Type.GetNonNullableType()) && !ParameterIsAssignable(parametersCached[0], left.Type))
1300 {
1301 throw Error.OperandTypesDoNotMatchParameters(ExpressionType.Coalesce, conversion.ToString());
1302 }
1303 return new CoalesceConversionBinaryExpression(left, right, conversion);
1304 }
static void RequiresCanRead(Expression expression, string paramName)
static bool AreEquivalent(Type t1, Type t2)
Definition TypeUtils.cs:664
static Type ValidateCoalesceArgTypes(Type left, Type right)
static bool ParameterIsAssignable(ParameterInfo pi, Type argType)

References System.Dynamic.Utils.TypeUtils.AreEquivalent(), System.Linq.Expressions.Error.CoalesceUsedOnNonNullType(), System.Linq.Expressions.Error.IncorrectNumberOfMethodCallArguments(), System.Linq.Expressions.Error.OperandTypesDoNotMatchParameters(), System.Linq.Expressions.Expression< TDelegate >.ParameterIsAssignable(), System.Dynamic.Utils.ExpressionUtils.RequiresCanRead(), System.type, System.Linq.Expressions.Error.UserDefinedOperatorMustNotBeVoid(), and System.Linq.Expressions.Expression< TDelegate >.ValidateCoalesceArgTypes().