[Mono-bugs] [Bug 567351] New: Cannot SetValue of Nullable Property
bugzilla_noreply at novell.com
bugzilla_noreply at novell.com
Sun Dec 27 10:26:58 EST 2009
http://bugzilla.novell.com/show_bug.cgi?id=567351
http://bugzilla.novell.com/show_bug.cgi?id=567351#c0
Summary: Cannot SetValue of Nullable Property
Classification: Mono
Product: MonoTouch
Version: unspecified
Platform: Macintosh
OS/Version: Mac OS X 10.5
Status: NEW
Severity: Critical
Priority: P5 - None
Component: Runtime
AssignedTo: gnorton at novell.com
ReportedBy: tscott at lunaversesoftware.com
QAContact: mono-bugs at lists.ximian.com
Found By: ---
Blocker: ---
User-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US;
rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5
MonoTouch throws an exeception when trying to set a value of a nullable
property via reflection. (NOTE: This issue was reported on the Monotouch list
in November 09.)
Reproducible: Always
Steps to Reproduce:
Run the code in "Additional Information."
Actual Results:
The following exception is thrown for all nullable properties:
System.Reflection.TargetInvocationException:
Exception has been thrown by the target of an invocation. --->
System.ExecutionEngineException: Attempting to JIT compile method
'(wrapper runtime-invoke)
Expected Results:
No exception.
// This code illustrates the problem.
namespace ShowSetValueNullableBug
{
public class Application
{
static Foo foo = new Foo();
static void Main (string[] args)
{
TrySetValue<string>("String");
TrySetValue<int>("Int");
TrySetValue<bool>("Bool");
TrySetValue<DateTime>("DateTime");
TrySetValue<decimal>("Decimal");
TrySetValue<double>("Double");
TrySetValue<long>("Long");
TrySetValue<byte>("Byte");
TrySetValue<float>("Float");
TrySetValue<char>("Char");
TrySetValue<short>("Short");
TrySetValue<uint>("UInt");
TrySetValue<ulong>("ULong");
TrySetValue<ushort>("UShort");
TrySetValue<MyEnum>("Enum");
TrySetValue<TimeSpan>("TimeSpan");
TrySetValue<int?>("NullableInt");
TrySetValue<bool?>("NullableBool");
TrySetValue<DateTime?>("NullableDateTime");
TrySetValue<decimal?>("NullableDecimal");
TrySetValue<double?>("NullableDouble");
TrySetValue<long?>("NullableLong");
TrySetValue<byte?>("NullableByte");
TrySetValue<char?>("NullableChar");
TrySetValue<short?>("NullableShort");
TrySetValue<uint?>("NullableUInt");
TrySetValue<ulong?>("NullableULong");
TrySetValue<ushort?>("NullableUShort");
TrySetValue<TimeSpan?>("NullableTimeSpan");
TrySetValue<MyEnum>("NullableEnum");
UIApplication.Main (args);
}
private static void TrySetValue<T>(string propertyName)
{
var propertyInfo = typeof(Foo).GetProperty(propertyName);
try
{
propertyInfo.SetValue(foo, default(T), null);
Console.WriteLine(string.Format("Set value of {0} succeeds!",
propertyName));
}
catch (Exception ex)
{
Console.WriteLine(string.Format("Set value of {0} FAILS!",
propertyName));
}
}
}
public class Foo
{
public string String { get; set; }
public int Int { get; set; }
public bool Bool { get; set; }
public DateTime DateTime { get; set; }
public decimal Decimal { get; set; }
public double Double { get; set; }
public long Long { get; set; }
public byte Byte { get; set; }
public float Float { get; set; }
public char Char { get; set; }
public short Short { get; set; }
public uint UInt { get; set; }
public ulong ULong { get; set; }
public ushort UShort { get; set; }
public MyEnum Enum { get; set; }
public TimeSpan TimeSpan { get; set; }
public int? NullableInt { get; set; }
public bool? NullableBool { get; set; }
public DateTime? NullableDateTime { get; set; }
public decimal? NullableDecimal { get; set; }
public double? NullableDouble { get; set; }
public long? NullableLong { get; set; }
public byte? NullableByte { get; set; }
public float? NullableFloat { get; set; }
public char? NullableChar { get; set; }
public short? NullableShort { get; set; }
public uint? NullableUInt { get; set; }
public ulong? NullableULong { get; set; }
public ushort? NullableUShort { get; set; }
public TimeSpan? NullableTimeSpan { get; set; }
public MyEnum? NullableEnum { get; set; }
}
public enum MyEnum
{
One
}
public partial class AppDelegate : UIApplicationDelegate
{
public override bool FinishedLaunching (UIApplication app, NSDictionary
options)
{
window.MakeKeyAndVisible ();
return true;
}
public override void OnActivated (UIApplication application)
{
}
}
}
--
Configure bugmail: http://bugzilla.novell.com/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the QA contact for the bug.
More information about the mono-bugs
mailing list