Home All Groups Group Topic Archive Search About

InstanceDescriptor problem rendering Nullable<double> constructor parameters

Author
5 Jan 2007 2:12 AM
Nathan Alden
I have a class like so:

public class MyClass
{
    public MyClass(double? x, double? y)
    {
    }
}

I have created a type converter for this class that converts MyClass to an
InstanceDescriptor which renders a line of code like the following on a form
when x and y are null:

this.myComponent1.MyClassInstance = new MyClass(null, null);

The designer deserialization mechanism in Visual Studio is able to correctly
determine which constructor must be called on the MyClass class when
entering design mode.

However, if x and y are not null, and happen to have no decimal, the
following line of code is rendered:

this.myComponent1.MyClassInstance = new MyClass(2, 1);

This causes an exception when the form is designed with an error about a
constructor with Int32, Int32 signature not being found. It appears as
though there is no implicit conversion (for some reason) from Int32 to
Nullable<Double>.

So far I have not been able to find a way to cause the InstanceDescriptor to
render an explicit cast statement (double?) to ensure the constructor is
called successfully.

Has anyone experienced this problem before, and if so, how did you solve it?

Thanks.

-- Nathan

Author
15 Jan 2007 6:12 AM
Alexander Malapheev[MCP]
Hi, Nathan

Maybe you can just add another one constructor?

public MyClass(int t1, int t2)
{
}

Show quote
> I have a class like so:
>
> public class MyClass
> {
>     public MyClass(double? x, double? y)
>     {
>     }
> }
>
> I have created a type converter for this class that converts MyClass to an
> InstanceDescriptor which renders a line of code like the following on a form
> when x and y are null:
>
> this.myComponent1.MyClassInstance = new MyClass(null, null);
>
> The designer deserialization mechanism in Visual Studio is able to correctly
> determine which constructor must be called on the MyClass class when
> entering design mode.
>
> However, if x and y are not null, and happen to have no decimal, the
> following line of code is rendered:
>
> this.myComponent1.MyClassInstance = new MyClass(2, 1);
>
> This causes an exception when the form is designed with an error about a
> constructor with Int32, Int32 signature not being found. It appears as
> though there is no implicit conversion (for some reason) from Int32 to
> Nullable<Double>.
>
> So far I have not been able to find a way to cause the InstanceDescriptor to
> render an explicit cast statement (double?) to ensure the constructor is
> called successfully.
>
> Has anyone experienced this problem before, and if so, how did you solve it?
>
> Thanks.
>
> -- Nathan
>
>
Author
15 Jan 2007 6:13 AM
Alexander Malapheev[MCP]
Hi, Nathan

Maybe you can just add another one constructor?

public MyClass(int t1, int t2)
{
}
Show quote
> I have a class like so:
>
> public class MyClass
> {
>     public MyClass(double? x, double? y)
>     {
>     }
> }
>
> I have created a type converter for this class that converts MyClass to an
> InstanceDescriptor which renders a line of code like the following on a form
> when x and y are null:
>
> this.myComponent1.MyClassInstance = new MyClass(null, null);
>
> The designer deserialization mechanism in Visual Studio is able to correctly
> determine which constructor must be called on the MyClass class when
> entering design mode.
>
> However, if x and y are not null, and happen to have no decimal, the
> following line of code is rendered:
>
> this.myComponent1.MyClassInstance = new MyClass(2, 1);
>
> This causes an exception when the form is designed with an error about a
> constructor with Int32, Int32 signature not being found. It appears as
> though there is no implicit conversion (for some reason) from Int32 to
> Nullable<Double>.
>
> So far I have not been able to find a way to cause the InstanceDescriptor to
> render an explicit cast statement (double?) to ensure the constructor is
> called successfully.
>
> Has anyone experienced this problem before, and if so, how did you solve it?
>
> Thanks.
>
> -- Nathan
>
>

AddThis Social Bookmark Button