如何知道给定是否是特定类的变量?

时间:2014-08-06 02:35:30

标签: c#

我想知道传递的对象是否实际引用了特定类的变量。

考虑下面某些类'ClassA'的结构:

public classA
{
string variable1;
int variable2;

method1(ref variable1);
}

现在如果在包含method1(Obj object1)的实现的类中,我想检查'object1'是否是特定'ClassA'的变量?

因为我想检查条件,如果object1是ClassA的variable1,那么//继续逻辑....

请提供相同的小例子。

2 个答案:

答案 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
    }
   . . .
 }
}