我有两种名为Effect
和EffectMethods
的类型,它是我调用方法的静态类:
public class EffectMethods
{
public static EffectResult Blend (Effect effect)
{
bool success = true;
return new EffectResult ( effect.Type, success );
}
}
我找到了正确的方法:
Type.GetMethods ( BindingFlags.Public | BindingFlags.Static );
并过滤掉正确的。
但是当我打电话给它时:
( EffectResult ) method.Invoke ( null, new object [ ] { this } );
public class Effect
{
public EffectResult Apply()
{
var methods = Type.GetMethods ( BindingFlags.Public | BindingFlags.Static );
var method = methods.First ( ... );
// This result value is now different (success = false)
return ( EffectResult ) method.Invoke ( null, new object [ ] { this } );
}
}
我收到了错误的结果。此处this
是Effect
的当前实例,因为它是包含反射调用的类型。
基本上我计算的一个值是一个返回操作是否成功的标志。但是这个值在代码中设置为true,但是在方法通过反射返回后,结果是不同的。
我这样做错了吗?有什么我想念的吗?我可以清楚地看到方法中的值是真实的,但在呼叫网站上,它显示的方式不同。
答案 0 :(得分:2)
我不明白为什么它应该返回“坏价值”。你没有提供完整的代码,所以我只能给你两个猜测。
在EffectResult
的构造函数中,您忘记将success
参数设置为属性,或者属性实现错误。
用于获取方法的Type
不是EffectMethods
,或者您的AppDomain中有不同实现的重复程序集。检查已加载的模块。
答案 1 :(得分:1)
你可以发布更多代码吗?我猜测一些基于你所展示的代码的定义。使用我猜测的定义我没有问题,当然我假设只有一个公共静态方法和一些基本定义等。
对于那些类或骨架,查看实际代码会更有帮助。尽管如此,它仍然有用。
using System;
using System.Reflection;
public enum EffectType
{
A,
B
}
public class Effect
{
public EffectType Type { get; set; }
}
public class EffectResult
{
public EffectType Type { get; set; }
public bool Success { get; set; }
public EffectResult(EffectType type, bool success)
{
Type = type;
Success = success;
}
}
public class EffectMethods
{
public static EffectResult Blend(Effect effect)
{
bool success = true;
return new EffectResult(effect.Type, success);
}
}
public static class Program
{
public static void Main()
{
var methods = typeof (EffectMethods).GetMethods(BindingFlags.Public | BindingFlags.Static);
var result = methods[0].Invoke(null, new object[] { new Effect { Type = EffectType.A } });
Console.WriteLine(result);
}
}