Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
c#使用参数的计算结果调用base()_C#_Constructor - Fatal编程技术网

c#使用参数的计算结果调用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];

我需要编写一个异常类,根据输入参数自动确定消息。如何将该动态消息传递给base()

这是我想做的事情的代码,但它不起作用

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(),顺序不是问题。