По сути, я создаю небольшую 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, но предпочел бы что-то более подходящее. Буду признателен за предложение относительно соответствующего исключения.
Заранее спасибо.