Какое исключение следует выдавать при несовпадении типов во время выполнения в C# - PullRequest
0 голосов
/ 11 января 2020

По сути, я создаю небольшую DLL-библиотеку для инъекций IL, которая использует MONO.CECIL и C#, в первую очередь для обучения, но и для собственного будущего хобби.

Я не особо разбираюсь в исключения (или 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);
        }

Вот вызов, на который будет сгенерировано исключение:

 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.");
                }

Я временно использовал исключение NOT IMPLEMENTED, но предпочел бы что-то более подходящее. Буду признателен за предложение относительно соответствующего исключения.

Заранее спасибо.

...