在运行时执行隐式转换

Adr*_*vel 7 c# generics reflection

所以我有一个带有隐式转换的Generic类(它主要是一个容器类),如下所示:

public class Container<T>  
{  
        public T Value { get; set; }

        public static implicit operator T(Container<T> t)
        {
            return t.Value;
        }

        public static implicit operator Container<T>(T t)
        {
            return new Container<T>() { Value = t };
        }
} 
Run Code Online (Sandbox Code Playgroud)

所以在运行时我想Container<int>使用反射转换为int 的实例,但似乎无法找到方法,我已经尝试了在几个地方提到的"Cast"方法调用,但我得到了一个Specified cast is not valid.异常.

任何帮助将不胜感激.

Ani*_*Ani 6

除非有问题的类型是您无法修改的程序集内部,否则几乎没有理由这样做.

但如果是这样的话,我个人更喜欢看起来更清洁的dynamic解决方案(如jbtule所述)来反思.

但是既然你要求使用反射的解决方案(也许你在.NET 3.5或更早版本?),你可以这样做:

object obj = new Container<int>();

var type = obj.GetType();
var conversionMethod = type.GetMethod("op_Implicit", new[] { type });
int value = (int)conversionMethod.Invoke(null, new[] { obj });
Run Code Online (Sandbox Code Playgroud)