[Mono-list] PropertyInfo bug?
A Rafael D Teixeira
rafael.teixeirabr@terra.com.br
Thu, 18 Mar 2004 10:44:44 -0300
HI Kris,
Well if you have a confirmed bug please report it at bugzilla.
Anyway, I wouldn't use a try-fail-backtrack-try_diferently process to
approach this coding problem.
I would use the method FindMembers:
Button b = new Button ("I am a button");
MemberInfo[] arrayMemberInfo = b.GetType().FindMembers(MemberTypes.Method | MemberTypes.Property,
BindingFlags.Public | BindingFlags.Instance,
Type.FilterName,
"ModifyBg");
if (arrayMemberInfo == null || arrayMemberInfo.Length == 0)
// throw some error here, about not having the appropriate member
if (arrayMemberInfo.Length > 1)
// throw some error here, about having overloads
// or look for the one with appropriate parameters
if (arrayMemberInfo[0] is PropertyInfo) {
PropertyInfo pInfo = arrayMemberInfo[0] as PropertyInfo;
System.Object[] args= new System.Object[2];
args[0] = StateType.Normal;
args[1] = new Gdk.Color(255,0,0);
pInfo.SetValue(b, args, null);
} else {
// do as a method here
}
Hope it helps,
--
Rafael "Monoman" Teixeira
Mono Hacker since 16 Jul 2001 - http://www.go-mono.org/
Mono Brasil Founding Member - http://monobrasil.redesolbrasil.org/
English Blog: http://monoblog.blogspot.com/
Brazilian Portuguese Blog: http://monoblog.weblogger.terra.com.br/
On Wed, 2004-03-17 at 19:43, Kris Luyten wrote:
> Hi,
>
> I am implementing a library that relies heavily on reflection (a User
> Interface Markup Language renderer). It dynamically sets properties of
> widgets. Since the library does not know whether it is dealing with a
> method or a property it tries to load the specified string (e.g.
> "ModifyBg") as a property first, and when this fails it tries to load it
> as a method.
>
> Since a couple of weeks, the following code hangs, instead of throwing
> an exception or just failing:
>
> Button b = new Button ("I am a button");
> PropertyInfo pInfo = b.GetType().GetProperty("ModifyBg");
> System.Object[] args= new System.Object[2];
> args[0] = StateType.Normal;
> args[1] = new Gdk.Color(255,0,0);
> pInfo.SetValue(b, args, null);
>
> The second line of the code succeeds, although ModifyBg is a method
> afaik. Still, the program hangs on the last line. If someone wants to
> test the full example, it is available here:
> http://research.edm.luc.ac.be/~kris/projects/uiml.net/examples/test16.cs
>
> I am not sure whether this behavior is caused by a bug in mono or gtk#,
> or a mistake I made.
>
> my specs:
> Debian Sid
> Mono JIT compiler version 0.30.99.20040307
> Mono C# compiler version 0.30.99.51827
> Gtk# from CVS, two weeks old
>
>
> Regards,
> Kris