Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 6904343
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: May 27, 20262026-05-27T08:02:58+00:00 2026-05-27T08:02:58+00:00

Basically, some internal check that happens in the static System.Linq.Expressions.Expression.Bind() method says Method is

  • 0

Basically, some internal check that happens in the static System.Linq.Expressions.Expression.Bind() method says “Method is not a property accessor” on my property that is clearly a property. Using Reflector, I’ve minimized the amount of code causing the problem, and I can’t for the life of me figure out why this would happen. My only guess is that it has something to do with the fact that the property isn’t on the class itself, but I would think this should still work:

I’ve tried to make a small example with the least amount of code possible. The code below should run in its entirety.

using System;
using System.Reflection;

public class Base
{
    public virtual int Id { get; set; }
}

// As you can see, SubClass does not override the Id property of Base.
public class SubClass : Base { }

class Program
{
    static void Main(string[] args)
    {
        // Getting the property directly from the type.
        PropertyInfo propertyInfo = typeof(SubClass).GetProperty("Id");
        MethodInfo setMethod = propertyInfo.GetSetMethod();

        /*  Code from here on out is from the System.Linq.Expressions.Bind() method (the one
            that accepts a MethodInfo argument). This method causes GetProperty to be called
            and retrieve what should be the same PropertyInfo. It fails here, saying something
            along the lines of "Method is not a property accessor." which doesn't make sense. */
        PropertyInfo propertyInfo2 = GetProperty(setMethod);
    }

    private static PropertyInfo GetProperty(MethodInfo mi)
    {
        // Not sure if it matters, but declaringType here is "Base".
        Type declaringType = mi.DeclaringType;

        BindingFlags bindingAttr = BindingFlags.NonPublic | BindingFlags.Public;
        bindingAttr |= mi.IsStatic ? BindingFlags.Static : BindingFlags.Instance;

        foreach (PropertyInfo info in declaringType.GetProperties(bindingAttr))
        {
            // For the "Id" property, info.CanRead is true, but CheckMethod is false.
            if (info.CanRead && CheckMethod(mi, info.GetGetMethod(true)))
                return info;

            // For the "Id" property, info.CanWrite is true, but CheckMethod is false.
            if (info.CanWrite && CheckMethod(mi, info.GetSetMethod(true)))
                return info;
        }

        // This gets thrown after passing by the "Id" property that is the one I'm looking for.
        throw new Exception("Method is not a property accessor");
    }

    private static bool CheckMethod(MethodInfo method, MethodInfo propertyMethod)
    {
        // These are not equal, so it goes to the next check. In the debugger, they appear identical when I look through the object tree.
        if (method == propertyMethod)
            return true;

        Type declaringType = method.DeclaringType;
        return ((declaringType.IsInterface && (method.Name == propertyMethod.Name)) && (declaringType.GetMethod(method.Name) == propertyMethod));
    }
}

If anyone could help I would greatly appreciate it! I’m very much lost at this point.

Edit – If you substitute typeof(SubClass) with typeof(Base), it works, so it’s something related to that relationship. I guess I could cut the issue off at the root by making an extension method like typeof(SubClass).GetPropertyFromActualClass("Id") but I’m not sure how to perform that check.

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-05-27T08:02:59+00:00Added an answer on May 27, 2026 at 8:02 am

    The property and method infos of Base and SubClass are indeed not equal, even if SubClass has no own implementation, as can be seen here:

    var subPropertyInfo = typeof(SubClass).GetProperty("Id");
    var subPropertyInfoSetter = subPropertyInfo.GetSetMethod();
    
    var basePropertyInfo = typeof(Base).GetProperty("Id");
    var basePropertyInfoSetter = basePropertyInfo.GetSetMethod();
    
    Console.WriteLine(subPropertyInfo == basePropertyInfo);     // false
    Console.WriteLine(subPropertyInfoSetter == basePropertyInfoSetter); // false
    

    If you use mi.ReflectedType instead of mi.DeclaringType, the check succeeds:

    var type = subPropertyInfoSetter.ReflectedType;
    Console.WriteLine(type.GetProperty("Id").GetSetMethod() 
                                   == subPropertyInfoSetter); // true
    
    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

Basically I have some code to check a specific directory to see if an
Basically I have some variables that I don't want to preinitialize: originalTime = None
I'm using jQuery and made a plugin for some in house work that basically
I'm mirroring some internal websites for backup purposes. As of right now I basically
I am testing a static method that builds a URL string after checking proxies
Basically, I referred to some sources, and found this: Yah, that's easy, just create
This happens only on some ICS devices. What my app is doing is basically
I have some html that is output by PHP's urlencode - basically it's a
I've spent most of the day making what are basically some housekeeping changes to
I have a nice DataGridView showing what is basically some kind of log data

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.