我想知道传递的对象是否实际引用了特定类的变量。
考虑下面某些类'ClassA'的结构:
public classA
{
string variable1;
int variable2;
method1(ref variable1);
}
现在如果在包含method1(Obj object1)的实现的类中,我想检查'object1'是否是特定'ClassA'的变量?
因为我想检查条件,如果object1是ClassA的variable1,那么//继续逻辑....
请提供相同的小例子。
答案 0 :(得分:0)
在安全代码中你最接近的是使用表达式,但老实说你可能不想这样做。尝试和调试是一场噩梦,可能还有另一种方法可以解决它。例如,有什么理由变量1不能是特定类型吗?
既然我已经说过理由,那么使用表达式的方法就是这样的(这是来自一个调试助手,我绝不会在任何远程严重的情况下使用这种方法。注意:很多异常处理和其他代码都被剥离了从这一点,还要注意它看起来多么丑陋和黑暗,这就是你真的不应该这样做的原因):
public static void DoStuffWithParameter<T>(Expression<Func<T>> paramExpression)
{
if (paramExpression == null) throw new ArgumentNullException("paramExpression");
var body = ((MemberExpression)paramExpression.Body);
var paramName = body.Member.Name;
var param = ((FieldInfo)body.Member)
.GetValue(((ConstantExpression)body.Expression).Value);
var declaringType = param.DeclaringType;
var paramValue = paramExpression
.Compile()
.Invoke();
if(declaringType.Equals(typeof(ClassA)))
{
//do stuff
}
}
要使用它,你可以使用类似的东西:
DoStuffWithParameter(()=>myClass.VarA);
答案 1 :(得分:0)
我找到了解决方案。最简单的方法是在method1中传递发送者的对象并继续,如下所示。
method1(Object sender, ref Object var)
{
if(sender is classA)
{
classA senderObj= (classA) sender;
if((string)var == senderObj.variable1)
{
// Logic for variable1
}
else if((int)var == senderObj.variable2)
{
// Logic for variable2
}
. . .
}
}