简体   繁体   中英

How to know whether given is variable of specific class?

I want to know whether passed object is actually reference of variable of specific class or not.

Consider below structure of some class 'ClassA':

public classA
{
string variable1;
int variable2;

method1(ref variable1);
}

Now if in class that contains implementation of method1(Obj object1), I want to check that 'object1' is which variable of specific 'ClassA' ?

Because I want to check in if condition like if object1 is variable1 of ClassA then //to proceed with logic....

Please provide a small example for the same.

The closest you could get to this in safe code is using expressions, but honestly you probably don't want to do this . It'd be a nightmare to try and debug, and there's probably another way to go about it. For example, is there any reason variable1 can't be of a specific type?

Now that I've spoken reason, the approach using expressions goes something like this (This is from a debugging helper, I would never use this approach in anything remotely serious. Note: A lot of exception handling and other code is stripped from this, also note how ugly and hackish it looks, that's all why you really shouldn't do this):

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 
        }
}       

To use that you'd use something like:

DoStuffWithParameter(()=>myClass.VarA);

I found solution. The simplest way to do this is to pass object of sender in method1 and proceed, like below.

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM