Bug 14824 - AggregateException.GetBaseException differs in Mono and .net 4.5
Summary: AggregateException.GetBaseException differs in Mono and .net 4.5
Status: RESOLVED FIXED
Alias: None
Product: Class Libraries
Classification: Mono
Component: mscorlib (show other bugs)
Version: master
Hardware: PC Windows
: --- normal
Target Milestone: Untriaged
Assignee: Marek Safar
URL:
Depends on:
Blocks:
 
Reported: 2013-09-18 05:53 UTC by Daniel
Modified: 2013-09-20 12:01 UTC (History)
3 users (show)

See Also:
Tags:
Is this bug a regression?: ---
Last known good build:


Attachments

Description Daniel 2013-09-18 05:53:34 UTC
The following Unit-Test code succeeds on both platforms:

var ex = new InvalidOperationException();
Assert.AreEqual(ex, new AggregateException(new AggregateException(ex)).GetBaseException());


This code succeeds on .net 4.5 but fails in Xamarin.Android 4.8.1:

var ex = new InvalidOperationException();
Assert.AreEqual(ex, new AggregateException(new AggregateException(ex, new Exception())).GetBaseException().InnerException);


However, this succeeds in Xamarin.Android 4.8.1

var ex = new InvalidOperationException();
Assert.AreEqual(ex, new AggregateException(new AggregateException(ex, new Exception())).GetBaseException());


Mono code for GetBaseException looks like this:

public override Exception GetBaseException ()
{
	if (innerExceptions == null || innerExceptions.Count == 0)
		return this;

	return innerExceptions[0].GetBaseException ();
}

while it appears that .net's implementation rather does this:

public override Exception GetBaseException ()
{
	if (innerExceptions == null || innerExceptions.Count != 1)
		return this;

	return innerExceptions[0].GetBaseException ();
}

Haven't tested this on .net 4 and below.
Comment 1 Marek Safar 2013-09-20 12:01:22 UTC
Fixed in master

Note You need to log in before you can comment on or make changes to this bug.