Как выполнить неявное приведение к отраженному вызову метода

У меня есть класс Thing, который неявно может быть преобразован из string. Когда я вызываю метод с параметром Thingнапрямую, приведение от stringк Thingвыполняется правильно.

Однако, если я использую отражение для вызова того же метода, возникает исключение

System.ArgumentException : Object of type 'System.String' cannot be 
converted to type 'Things.Program+Thing'.

. Возможно, для этого есть веская причина, но я не могу ее понять. У кого-нибудь есть идея, как заставить это работать с помощью отражения?

namespace Things
{
    class Program
    {
        public class Thing
        {
            public string Some;

            public static implicit operator Thing(string s)
            {
                return new Thing {Some = s};
            }
        }

        public void showThing(Thing t)
        {
            Console.WriteLine("Some = " + t.Some);
        }

        public void Main()
        {
            showThing("foo");
            MethodInfo showThingReflected = GetType().GetMethod("showThing");
            showThingReflected.Invoke(this, new dynamic[] {"foo"});
        }
    }
}

Мета:Пожалуйста, не обсуждайте, почему неявное приведение или отражение — это плохо.

23
задан denfromufa 20 September 2016 в 08:24
поделиться