Как вызвать правильную перегруженную функцию с учетом ссылки на объект на основе фактического типа объекта. Например...
class Test
{
object o1 = new object();
object o2 = new string("ABCD");
MyToString(o1);
MyToString(o2);//I want this to call the second overloaded function
void MyToString(object o)
{
Console.WriteLine("MyToString(object) called.");
}
void MyToString(string str)
{
Console.WriteLine("MyToString(string) called.");
}
}
что я имею в виду, есть ли лучший вариант, чем следующий?
if (typeof(o) == typeof(string))
{
MyToString((string)o);
}
else
{
MyToString(o);
}
Может быть, это можно сделать с помощью рефлексии?
Хорошо, как только я нажал кнопку, я вспомнил, что это действительно можно сделать с помощью отражения ...
var methInfo = typeof(Test).GetMethod("MyToString", new Type[] {o.GetType()});
methInfo.Invoke(this, new object[] {o});
Почему бы не иметь функцию toString () в самом фактическом объекте? Таким образом, вы можете вызвать myObj.toString () и получить относительный результат. Тогда не нужно никаких сравнений.
Вы можете просто использовать тернарные операторы, чтобы закодировать это, используя одну чистую строку кода:
MyToString(o is string ? (string)o : o);
Это просто пример, демонстрирующий мою настоящую проблему.