c#使用参数的计算结果调用base()
我需要编写一个异常类,根据输入参数自动确定消息。如何将该动态消息传递给base() 这是我想做的事情的代码,但它不起作用c#使用参数的计算结果调用base(),c#,constructor,C#,Constructor,我需要编写一个异常类,根据输入参数自动确定消息。如何将该动态消息传递给base() 这是我想做的事情的代码,但它不起作用 public class MyException : Exception { public MyException(int ErrCode, Dictionary<string, string> Params) : base(msg_external) { ErrorDetail = ErrorList[ErrCode];
public class MyException : Exception
{
public MyException(int ErrCode, Dictionary<string, string> Params) : base(msg_external)
{
ErrorDetail = ErrorList[ErrCode];
string msg_internal = "";
string msg_external = "";
foreach (var item in Params)
{
msg_internal = ErrorDetail.MessageInternal.Replace(item.Key, item.Value);
msg_external = ErrorDetail.MessageExternal.Replace(item.Key, item.Value);
}
//now I need to pass msg_external to the base(). how?
}
}
公共类MyException:异常
{
public MyException(int ErrCode,Dictionary参数):base(msg_external)
{
ErrorDetail=ErrorList[ErrCode];
字符串msg_internal=“”;
字符串msg_external=“”;
foreach(参数中的变量项)
{
msg_internal=ErrorDetail.MessageInternal.Replace(item.Key,item.Value);
msg_external=ErrorDetail.MessageExternal.Replace(item.Key,item.Value);
}
//现在我需要将msg_external传递给base()。如何传递?
}
}
这个问题不是在我的构造函数之后调用构造函数,而是将不同的值传递给父构造函数。下面的代码可以实现您想要的功能 假设输入良好。建议进行错误检查
public class MyException : Exception
{
private static string BaseExceptionMessage(int ErrCode, Dictionary<string,string> Params)
{
return Params.Aggregate(ErrorList[ErrCode].MessageExternal, (i, a) => i.Replace(a.Key, a.Value));
}
public MyException(int ErrCode, Dictionary<string, string> Params) : base(BaseExceptionMessage(ErrCode, Params))
{
ErrorDetail = ErrorList[ErrCode];
string msg_internal = "";
string msg_external = "";
foreach (var item in Params)
{
msg_internal = ErrorDetail.MessageInternal.Replace(item.Key, item.Value);
msg_external = ErrorDetail.MessageExternal.Replace(item.Key, item.Value);
}
}
}
公共类MyException:异常
{
私有静态字符串BaseExceptionMessage(int ErrCode,Dictionary参数)
{
返回Params.Aggregate(ErrorList[ErrCode].MessageExternal,(i,a)=>i.Replace(a.Key,a.Value));
}
public MyException(int ErrCode,Dictionary Params):base(BaseExceptionMessage(ErrCode,Params))
{
ErrorDetail=ErrorList[ErrCode];
字符串msg_internal=“”;
字符串msg_external=“”;
foreach(参数中的变量项)
{
msg_internal=ErrorDetail.MessageInternal.Replace(item.Key,item.Value);
msg_external=ErrorDetail.MessageExternal.Replace(item.Key,item.Value);
}
}
}
您没有显示基本类是什么。MyException
是实现Exception
的类中的方法吗?如果在base()外部调用pass msg_,则再次生成基类的新实例,没有问题吗?将该逻辑移到静态方法中。将参数传递到方法中,并将方法调用的结果传递到base
@RufusL是的,您可以。我刚刚添加了类定义。MyException扩展了异常。@我只能生成一个没有任何参数的静态方法。一旦我向该静态方法添加了一个参数,它就会显示另一个错误“无法将方法组转换为字符串”,但在第行中有疑问,现在我需要将msg_external传递给base()。怎样?他想在foreach之后发送_msg_external uuu…您的代码是这样做的吗?还是在MyException的开头调用base?我的解决方案在将foreach传递给base之前执行等效的操作。此外,假设ErrorList是静态的。此解决方案有效。我需要将计算出的变量传递给base(),顺序不是问题。