Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/257.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# 在C语言中,当运行时类型不匹配时,应该抛出什么样的异常#_C#_Exception_Mono.cecil - Fatal编程技术网

C# 在C语言中,当运行时类型不匹配时,应该抛出什么样的异常#

C# 在C语言中,当运行时类型不匹配时,应该抛出什么样的异常#,c#,exception,mono.cecil,C#,Exception,Mono.cecil,本质上,我正在创建一个使用MONO.CECIL和C#的小IL注入DLL,主要是作为我自己的学习练习,也是为了我自己未来的爱好者使用 我对异常(或C#)不是特别熟练,并且不确定在运行时类型不匹配时抛出适当的异常是为了什么 例如:我有一个方法,它在目标DLL中的给定点注入方法调用。该方法将一个集合(参数)作为参数,以表示作为参数传递给新注入的方法调用的变量 在注入之前,我检查集合的每个成员(参数)和来自我正在注入其调用的方法的集合之间的类型奇偶校验 对于不匹配,我想抛出一个异常。但我真的找不到合适的

本质上,我正在创建一个使用MONO.CECIL和C#的小IL注入DLL,主要是作为我自己的学习练习,也是为了我自己未来的爱好者使用

我对异常(或C#)不是特别熟练,并且不确定在运行时类型不匹配时抛出适当的异常是为了什么

例如:我有一个方法,它在目标DLL中的给定点注入方法调用。该方法将一个集合(参数)作为参数,以表示作为参数传递给新注入的方法调用的变量

在注入之前,我检查集合的每个成员(参数)和来自我正在注入其调用的方法的集合之间的类型奇偶校验

对于不匹配,我想抛出一个异常。但我真的找不到合适的。我更愿意在可能的情况下使用现有的异常,而不是创建自己的异常

代码如下:

  private static bool ParameterParity(Collection<ParameterDefinition> p, Collection<VariableDefinition> v)
        {
            if (p.Count != v.Count)
            {
                return (false);
            }
            else
            {
                int index = 0;
                foreach (ParameterDefinition parameter in p)
                {
                    if (parameter.ParameterType.MetadataType != v[index].VariableType.MetadataType)
                    {
                        return (false);
                    }
                    index++;
                }
            }
            return (true);
        }
我暂时使用了NOT IMPLEMENTED异常,但希望使用更合适的异常。如能就适当的例外情况提出建议,将不胜感激


提前谢谢。

这可能最终是一个
例外情况
?某个地方的一个方法被赋予了一些参数,其中一个或多个参数出现了问题。如果该方法不被捕获,则使用现有的异常,并且用户需要自己解决它。但是,如果它将被捕获,那么您必须确保不会意外捕获由其他代码引发的代码。因此你创造了你自己的。
 if (ParameterParity(source.Parameters, parameters) == false)
                {
                    throw new NotImplementedException($"{Helper.AddParenthesis(nameof(PreInject), Helper.ParenthesisE.Square)}" +
                         $" : Parameter mismatch in TYPE or NUMBER" +
                         $". Functionality not supported.");
                }