Если вы не уверены, сделайте это безопасным способом.
public static void Foo(string body)
{
}
public static void Foo(string body, string caption)
{
}
public static void Foo(string body, string caption, int x)
{
}
public static void Foo(string body, string caption, object y)
{
}
РЕДАКТИРОВАТЬ: Поскольку вы упомянули, что может быть около 10 параметров, вам нужно более общее решение.
Существует опция с переменными аргументами. Проверьте тип каждого аргумента и действуйте соответственно:
public static void Foo(string body, param object[] the_rest_of_arguments)
{
}
Если два аргумента имеют один и тот же тип, но разные функциональные возможности (заголовок строки и, скажем, автор строки), вам нужно что-то еще. Вы можете иметь класс, который имеет все аргументы в качестве членов. Пользователь должен заполнить объект этого класса и передать этот объект в качестве единственного аргумента:
public class FooArguments
{
public string caption;
public int x;
public object y;
}
public static void Foo(string body, FooArguments the_rest_of_arguments)
{
}
Вместо нового класса FooArguments вы можете иметь Dictionary<string,object>
, где ключ - это имя аргумента, а значение - сам аргумент.
Если функция вызывается с неподходящей комбинацией аргументов, просто сгенерируйте исключение.