If you want an immediate work around I think: type(props).Name.Info.SetValue(props, value)
might work in 2.6. You'll need to do "import clr" for "Info" to be available on the reflected field object. > -----Original Message----- > From: [email protected] [mailto:users- > [email protected]] On Behalf Of Count László de Almásy > Sent: Monday, August 10, 2009 6:07 PM > To: Discussion of IronPython > Subject: Re: [IronPython] ValueError: cannot assign to value types > > i'd feek ok about any method that at least allowed me to work around > the current situaiton. a warning seems fine to me. even better, an > explicit way for us to enable the behavior without a warning. > > On Mon, Aug 10, 2009 at 6:27 PM, Dino Viehland<[email protected]> > wrote: > > Just out of curiosity - how would you feel if we enabled the behavior > > but issued a warning when it occurred? In v1.0 when we made this > > decision we had no warning support and it could serve as a mitigating > > factor in enabling it. But it could also be too noisy. > > > > It's funny, I just got had to fix a bug in IronPython where they > allow > > this but it doesn't really work. > > > > Given: > > > > List<SomeValueType> x; > > X[0].Bar = 42; > > > > fails to update the list. > > > > > >> -----Original Message----- > >> From: [email protected] [mailto:users- > >> [email protected]] On Behalf Of Count László de Almásy > >> Sent: Monday, August 10, 2009 5:20 PM > >> To: Discussion of IronPython > >> Subject: Re: [IronPython] ValueError: cannot assign to value types > >> > >> i dunno. i think this behavior needs to be re-thought for Ipy 2.6. i > >> understand the reasons behind the decision, but the bottom line is > >> that i'm unable to work with a perfectly valid, legal .NET assembly. > >> it's one thing to do this as the default behavior, but to not allow > >> the programmer to override it if that is his choice is not correct > in > >> my opinion. > >> > >> On Fri, Aug 7, 2009 at 11:04 PM, Curt > Hagenlocher<[email protected]> > >> wrote: > >> > __setattr__ it's not a *CLR*-level instance method of the type. > >> IronPython > >> > just makes it look like it is. > >> > One possibility is to simply create an entirely new Parcel from > >> scratch, > >> > assigning values as appropriate. For example, given the following > C# > >> > classes: > >> > > >> > public struct Point { > >> > public int x, y; > >> > } > >> > public class Line { > >> > public Point to, from; > >> > } > >> > > >> > You can do this from Python: > >> > > >> > F:\tcwb\libs>ipy.exe > >> > IronPython 2.6 Beta 2 (2.6.0.20) on .NET 2.0.50727.4927 > >> > Type "help", "copyright", "credits" or "license" for more > information. > >> >>>> import clr > >> >>>> clr.AddReference('x') > >> >>>> import Point, Line > >> >>>> l = Line() > >> >>>> l.to.x > >> > 0 > >> >>>> l.to.x = 1 > >> > Traceback (most recent call last): > >> > File "<stdin>", line 1, in <module> > >> > ValueError: cannot assign to value types > >> >>>> l.to = Point(x = 1, y = 2) > >> >>>> l.to.x > >> > 1 > >> >>>> > >> > > >> > On Fri, Aug 7, 2009 at 8:40 PM, Count László de Almásy > >> <[email protected]> > >> > wrote: > >> >> > >> >> i'm really stuck trying to change values for an object of type > >> >> 'Parcel', which comes from the openmetaverse library i'm using. > how > >> >> this library is implemented i don't have control over, but the > given > >> >> interface is to make local changes to these Parcel objects, then > use > >> >> its Update() method to commit the changes. but it seems in > >> IronPython > >> >> i can't change these objects. > >> >> > >> >> >>> type(props) > >> >> <type 'Parcel'> > >> >> > >> >> >>> props.Name = "Yes" > >> >> Traceback (most recent call last): > >> >> File "<stdin>", line 1, in <module> > >> >> ValueError: cannot assign to value types > >> >> > >> >> after hours of struggling, i found > >> >> http://ironpython.codeplex.com/Wiki/View.aspx?title=Value%20Types > >> >> which seems to explain why i'm being bit here. bit it also says > >> >> "updates are still possible via instance methods on the value > type > >> >> itself." so isn't "__setattr__" an instance method? seems i'm not > >> able > >> >> to use that either: > >> >> > >> >> >>> props.__setattr__("Name", "Yes") > >> >> Traceback (most recent call last): > >> >> File "<stdin>", line 1, in <module> > >> >> ValueError: Attempt to update field 'Name' on value type > 'Parcel'; > >> >> value type fields cannot be directly modified > >> >> > >> >> ok, so what are my options? how do i get around this? i *have* to > be > >> >> able to update objects of this type somehow. > >> >> > >> >> i can create a new object of that type, but the constructor > doesn't > >> >> allow me to pre-stock it with values ( since i guess it assumes > i'll > >> >> be able to change them later), and then of course once it's > created > >> i > >> >> can't change anything. > >> >> > >> >> -- > >> >> Cheers, László > >> >> _______________________________________________ > >> >> Users mailing list > >> >> [email protected] > >> >> http://lists.ironpython.com/listinfo.cgi/users-ironpython.com > >> > > >> > > >> > _______________________________________________ > >> > Users mailing list > >> > [email protected] > >> > http://lists.ironpython.com/listinfo.cgi/users-ironpython.com > >> > > >> > > >> > >> > >> > >> -- > >> Cheers, László > >> _______________________________________________ > >> Users mailing list > >> [email protected] > >> http://lists.ironpython.com/listinfo.cgi/users-ironpython.com > > > > _______________________________________________ > > Users mailing list > > [email protected] > > http://lists.ironpython.com/listinfo.cgi/users-ironpython.com > > > > > > -- > Cheers, László > _______________________________________________ > Users mailing list > [email protected] > http://lists.ironpython.com/listinfo.cgi/users-ironpython.com _______________________________________________ Users mailing list [email protected] http://lists.ironpython.com/listinfo.cgi/users-ironpython.com
