Object of type “X” cannot be converted to object of type “X”

后端 未结 8 1093
误落风尘
误落风尘 2020-12-09 16:10

(Can\'t believe this hasn\'t already been asked, but I can\'t find a dup)

In Visual Studio with lots of projects, when I first open the solution, I sometime

相关标签:
8条回答
  • 2020-12-09 16:30

    This would really depend on the exact scenario (that is vague), but the most likely cause would be different assembly references / versions. Perhaps you have some "top level" code that references version "A" of a dll, and references a library which references version "B" of a similar dll; then:

    SomeType foo = someObj.Foo;
    

    would have the SomeType (on the left) from "A", with .Foo the SomeType from "B". Try ensuring that all your projects are using the same version of all the assemblies you rely on.

    Another scenario is the same name in different namespaces, but that is a bit of an obvious one, and I suspect the error message would make this obvious?

    There are some other scenarios where types with the same names in the same namespace (but different assemblies) conflict with eachother; here "extern aliases" can help, but are a complete PITA to work with.

    0 讨论(0)
  • 2020-12-09 16:31

    I came across the same problem, and while Marc's answer did help me to understand what was going wrong, it did not solve my problem. Rebuilding did not help, and I was not using serialization in this case.

    Turns out my problem was happening because my project had a reference to itself (not quite sure how that happened, perhaps Resharper added the reference without me noticing?), and it was comparing the .cs file with the compiled .dll file. I simply removed the reference.

    Hope this helps anyone else with the same issue!

    0 讨论(0)
  • 2020-12-09 16:32

    I found the following to be useful, as described here: Object of type 'Data.TimeLineChartedDay[]' cannot be converted to type 'Data.TimeLineChartedDay[]'?

    [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
    
    0 讨论(0)
  • 2020-12-09 16:36

    If you have a user control that exposes an object with a getter/setter, you are going to have a bad time (as they say). It is, in fact, the setter that is the problem.

    SO to fix it, instead of doing this:

    public ObjectX
    {
        get { return _objx; }
        set 
        {
            _objx=value; 
            //do some other stuff
        }
    }
    

    You could do something along the lines of this:

    public ObjectX
    {
        get { return _objx; }
    }
    public void SetObjectX(ObjectX inVal)
    {
        _objx = inVal; 
        //do some other stuff
    }
    

    ... which will prevent the Visual Designer from trying to assign a serialized version of ObjectX to your control at design time, which is really what was going on ...

    0 讨论(0)
  • 2020-12-09 16:36

    After trying all of the above, cleaning, rebuilding, removing/re-adding references and editing the designer file - in the end simply closing visual studio and re-opening the project made everything better.

    tl;dr

    Try switching it off and on again.

    0 讨论(0)
  • 2020-12-09 16:37

    I had the same error as you but for me removing the resx file worked.

    0 讨论(0)
提交回复
热议问题