我手里有一个运输ID,我的目的是检查数据库此运输ID是否已分配给计划ID。如果已经分配了运输编号,则抛出参数异常{Shipping Id} has already assigned to Existing {Plan Id}
。
我可以为一个计划ID执行此操作。但是,如果该运输ID已经分配了多个计划ID,那么我应该扔掉所有这个计划ID。但是我不能使用Argument Exception。
我的代码:
foreach (var existingPlanId in checkExistingDateWithOtherPlanIds){
var checkPlanId = existingPlanId.ShippingSerieses.Contains(existingShippingId);
if (checkPlanId)
{
throw new ArgumentException($"ERROR#3% Shipping Id has already assigned to Plan Id: {Environment.NewLine}" +
$"ShippingID -> Plan ID {Environment.NewLine}" +
$"{existingShippingId.ShippingId} -> {existingPlanId.PlanId}, {positioningPlanToChange.PlanId}");
}
}
预期结果:
Shipping Id has already assigned to Plan Id:
ShippingID -> Plan ID
423 -> 601, 263, 321 341 , 543
答案 0 :(得分:0)
我不确定是否要在引发异常后停止程序,还是要继续执行。 从您的代码段中,您的程序将在第一次抛出后停止。
如果您希望它继续执行,请添加一个try catch块作为波纹管
foreach (var existingPlanId in checkExistingDateWithOtherPlanIds){
var checkPlanId = existingPlanId.ShippingSerieses.Contains(existingShippingId);
if (checkPlanId)
{
try {
throw new ArgumentException($"ERROR#3% Shipping Id has already assigned to Plan Id: {Environment.NewLine}" +
$"ShippingID -> Plan ID {Environment.NewLine}" +
$"{existingShippingId.ShippingId} -> {existingPlanId.PlanId}, {positioningPlanToChange.PlanId}");
}
catch {}
}
}
如果您打算在引发异常后停止程序执行,但仍显示所有相关产品。您必须在循环结束时抛出异常。
答案 1 :(得分:0)
您的案例看起来您需要自己的Exception
继任者:
public class PlanException : Exception
{
public int PlanId { get; }
public int ShippingId { get; }
public PlanException(string message, int planId, int shippingId)
: base(message)
{
PlanId = planId;
ShippingId = shippingId;
}
}
或者,您可以使用Exception
类的Data
属性。
public static class ExceptionExtensions
{
public static Exception AddData(this Exception exception, object key, object value)
{
exception.Add(key, value);
return exception;
}
}
. . .
throw new ArgumentException("Shipping id is already assigned.").AddData("planId", planId)
.AddData("shippingId", shippingId);
ArgumentException
并非适合您的情况的例外。通常,当参数具有意外值而无需复杂代码即可检查时,您可以抛出ArgumentException
。
例如:“一个参数应为正”,“一个参数应在2到10之间”,等等。
如您所见,您的情况更为复杂,所以也许InvalidOperationException
是更适合您的例外情况。