Created
October 24, 2017 15:59
-
-
Save myarichuk/db2a290ec8ae5ea0faf2698b0c5b02c2 to your computer and use it in GitHub Desktop.
InvalidProgramException reproduction
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using System; | |
using System.Collections; | |
using System.Collections.Generic; | |
namespace InvalidProgramExceptionReproduction | |
{ | |
class Program | |
{ | |
static void Main(string[] args) | |
{ | |
var doc = new Doc | |
{ | |
Id = "doc/1", | |
NumVals = new Dictionary<string, ValueHolder>() | |
}; | |
var docs = new[] {doc}; | |
var map = Map_0(docs); | |
var enumerator = map.GetEnumerator(); | |
//calling enumerator.MoveNext() for the first time throws the following: | |
/* | |
Unhandled Exception: System.InvalidProgramException: Common Language Runtime detected an invalid program. | |
at InvalidProgramExceptionReproduction.Program.<Map_0>d__3.MoveNext() | |
at InvalidProgramExceptionReproduction.Program.Main(String[] args) in C:\Work\ravendb4\test\Tryouts\Program.cs:line 25 | |
*/ | |
while (enumerator.MoveNext()) | |
{ | |
Console.WriteLine(enumerator.Current); | |
} | |
} | |
public class Doc | |
{ | |
public string Id { get; set; } | |
public Dictionary<string, ValueHolder> NumVals { get; set; } | |
} | |
public class ValueHolder | |
{ | |
public double? Value1 { get; set; } | |
public double? Value2 { get; set; } | |
} | |
static IEnumerable Map_0(IEnumerable<dynamic> docs) | |
{ | |
foreach (var doc in docs) | |
{ | |
yield return new | |
{ | |
Value001 = doc.NumVals.ContainsKey("Value001") && doc.NumVals["Value001"] != null ? (doc.NumVals["Value001"]).Value1 : ((double?)null), | |
Value002 = doc.NumVals.ContainsKey("Value002") && doc.NumVals["Value002"] != null ? (doc.NumVals["Value002"]).Value1 : ((double?)null), | |
Value003 = doc.NumVals.ContainsKey("Value003") && doc.NumVals["Value003"] != null ? (doc.NumVals["Value003"]).Value1 : ((double?)null), | |
Value004 = doc.NumVals.ContainsKey("Value004") && doc.NumVals["Value004"] != null ? (doc.NumVals["Value004"]).Value1 : ((double?)null), | |
Value005 = doc.NumVals.ContainsKey("Value005") && doc.NumVals["Value005"] != null ? (doc.NumVals["Value005"]).Value1 : ((double?)null), | |
Value006 = doc.NumVals.ContainsKey("Value006") && doc.NumVals["Value006"] != null ? (doc.NumVals["Value006"]).Value1 : ((double?)null), | |
Value007 = doc.NumVals.ContainsKey("Value007") && doc.NumVals["Value007"] != null ? (doc.NumVals["Value007"]).Value1 : ((double?)null), | |
Value008 = doc.NumVals.ContainsKey("Value008") && doc.NumVals["Value008"] != null ? (doc.NumVals["Value008"]).Value1 : ((double?)null), | |
Value009 = doc.NumVals.ContainsKey("Value009") && doc.NumVals["Value009"] != null ? (doc.NumVals["Value009"]).Value1 : ((double?)null), | |
Value010 = doc.NumVals.ContainsKey("Value010") && doc.NumVals["Value010"] != null ? (doc.NumVals["Value010"]).Value1 : ((double?)null), | |
Value011 = doc.NumVals.ContainsKey("Value011") && doc.NumVals["Value011"] != null ? (doc.NumVals["Value011"]).Value1 : ((double?)null), | |
Value012 = doc.NumVals.ContainsKey("Value012") && doc.NumVals["Value012"] != null ? (doc.NumVals["Value012"]).Value1 : ((double?)null), | |
Value013 = doc.NumVals.ContainsKey("Value013") && doc.NumVals["Value013"] != null ? (doc.NumVals["Value013"]).Value1 : ((double?)null), | |
Value014 = doc.NumVals.ContainsKey("Value014") && doc.NumVals["Value014"] != null ? (doc.NumVals["Value014"]).Value1 : ((double?)null), | |
Value015 = doc.NumVals.ContainsKey("Value015") && doc.NumVals["Value015"] != null ? (doc.NumVals["Value015"]).Value1 : ((double?)null), | |
Value016 = doc.NumVals.ContainsKey("Value016") && doc.NumVals["Value016"] != null ? (doc.NumVals["Value016"]).Value1 : ((double?)null), | |
Value017 = doc.NumVals.ContainsKey("Value017") && doc.NumVals["Value017"] != null ? (doc.NumVals["Value017"]).Value1 : ((double?)null), | |
Value018 = doc.NumVals.ContainsKey("Value018") && doc.NumVals["Value018"] != null ? (doc.NumVals["Value018"]).Value1 : ((double?)null), | |
Value019 = doc.NumVals.ContainsKey("Value019") && doc.NumVals["Value019"] != null ? (doc.NumVals["Value019"]).Value1 : ((double?)null), | |
Value020 = doc.NumVals.ContainsKey("Value020") && doc.NumVals["Value020"] != null ? (doc.NumVals["Value020"]).Value1 : ((double?)null), | |
Value021 = doc.NumVals.ContainsKey("Value021") && doc.NumVals["Value021"] != null ? (doc.NumVals["Value021"]).Value1 : ((double?)null), | |
Value022 = doc.NumVals.ContainsKey("Value022") && doc.NumVals["Value022"] != null ? (doc.NumVals["Value022"]).Value1 : ((double?)null), | |
Value023 = doc.NumVals.ContainsKey("Value023") && doc.NumVals["Value023"] != null ? (doc.NumVals["Value023"]).Value1 : ((double?)null), | |
Value024 = doc.NumVals.ContainsKey("Value024") && doc.NumVals["Value024"] != null ? (doc.NumVals["Value024"]).Value1 : ((double?)null), | |
Value025 = doc.NumVals.ContainsKey("Value025") && doc.NumVals["Value025"] != null ? (doc.NumVals["Value025"]).Value1 : ((double?)null), | |
Value026 = doc.NumVals.ContainsKey("Value026") && doc.NumVals["Value026"] != null ? (doc.NumVals["Value026"]).Value1 : ((double?)null), | |
Value027 = doc.NumVals.ContainsKey("Value027") && doc.NumVals["Value027"] != null ? (doc.NumVals["Value027"]).Value1 : ((double?)null), | |
Value028 = doc.NumVals.ContainsKey("Value028") && doc.NumVals["Value028"] != null ? (doc.NumVals["Value028"]).Value1 : ((double?)null), | |
Value029 = doc.NumVals.ContainsKey("Value029") && doc.NumVals["Value029"] != null ? (doc.NumVals["Value029"]).Value1 : ((double?)null), | |
Value030 = doc.NumVals.ContainsKey("Value030") && doc.NumVals["Value030"] != null ? (doc.NumVals["Value030"]).Value1 : ((double?)null), | |
Value031 = doc.NumVals.ContainsKey("Value031") && doc.NumVals["Value031"] != null ? (doc.NumVals["Value031"]).Value1 : ((double?)null), | |
Value032 = doc.NumVals.ContainsKey("Value032") && doc.NumVals["Value032"] != null ? (doc.NumVals["Value032"]).Value1 : ((double?)null), | |
Value033 = doc.NumVals.ContainsKey("Value033") && doc.NumVals["Value033"] != null ? (doc.NumVals["Value033"]).Value1 : ((double?)null), | |
Value034 = doc.NumVals.ContainsKey("Value034") && doc.NumVals["Value034"] != null ? (doc.NumVals["Value034"]).Value1 : ((double?)null), | |
Value035 = doc.NumVals.ContainsKey("Value035") && doc.NumVals["Value035"] != null ? (doc.NumVals["Value035"]).Value1 : ((double?)null), | |
Value036 = doc.NumVals.ContainsKey("Value036") && doc.NumVals["Value036"] != null ? (doc.NumVals["Value036"]).Value1 : ((double?)null), | |
Value037 = doc.NumVals.ContainsKey("Value037") && doc.NumVals["Value037"] != null ? (doc.NumVals["Value037"]).Value1 : ((double?)null), | |
Value038 = doc.NumVals.ContainsKey("Value038") && doc.NumVals["Value038"] != null ? (doc.NumVals["Value038"]).Value1 : ((double?)null), | |
Value039 = doc.NumVals.ContainsKey("Value039") && doc.NumVals["Value039"] != null ? (doc.NumVals["Value039"]).Value1 : ((double?)null), | |
Value040 = doc.NumVals.ContainsKey("Value040") && doc.NumVals["Value040"] != null ? (doc.NumVals["Value040"]).Value1 : ((double?)null), | |
Value041 = doc.NumVals.ContainsKey("Value041") && doc.NumVals["Value041"] != null ? (doc.NumVals["Value041"]).Value1 : ((double?)null), | |
Value042 = doc.NumVals.ContainsKey("Value042") && doc.NumVals["Value042"] != null ? (doc.NumVals["Value042"]).Value1 : ((double?)null), | |
Value043 = doc.NumVals.ContainsKey("Value043") && doc.NumVals["Value043"] != null ? (doc.NumVals["Value043"]).Value1 : ((double?)null), | |
Value044 = doc.NumVals.ContainsKey("Value044") && doc.NumVals["Value044"] != null ? (doc.NumVals["Value044"]).Value1 : ((double?)null), | |
Value045 = doc.NumVals.ContainsKey("Value045") && doc.NumVals["Value045"] != null ? (doc.NumVals["Value045"]).Value1 : ((double?)null), | |
Value046 = doc.NumVals.ContainsKey("Value046") && doc.NumVals["Value046"] != null ? (doc.NumVals["Value046"]).Value1 : ((double?)null), | |
Value047 = doc.NumVals.ContainsKey("Value047") && doc.NumVals["Value047"] != null ? (doc.NumVals["Value047"]).Value1 : ((double?)null), | |
Value048 = doc.NumVals.ContainsKey("Value048") && doc.NumVals["Value048"] != null ? (doc.NumVals["Value048"]).Value1 : ((double?)null), | |
Value049 = doc.NumVals.ContainsKey("Value049") && doc.NumVals["Value049"] != null ? (doc.NumVals["Value049"]).Value1 : ((double?)null), | |
Value050 = doc.NumVals.ContainsKey("Value050") && doc.NumVals["Value050"] != null ? (doc.NumVals["Value050"]).Value1 : ((double?)null), | |
Value051 = doc.NumVals.ContainsKey("Value051") && doc.NumVals["Value051"] != null ? (doc.NumVals["Value051"]).Value1 : ((double?)null), | |
Value052 = doc.NumVals.ContainsKey("Value052") && doc.NumVals["Value052"] != null ? (doc.NumVals["Value052"]).Value1 : ((double?)null), | |
Value053 = doc.NumVals.ContainsKey("Value053") && doc.NumVals["Value053"] != null ? (doc.NumVals["Value053"]).Value1 : ((double?)null), | |
Value054 = doc.NumVals.ContainsKey("Value054") && doc.NumVals["Value054"] != null ? (doc.NumVals["Value054"]).Value1 : ((double?)null), | |
Value055 = doc.NumVals.ContainsKey("Value055") && doc.NumVals["Value055"] != null ? (doc.NumVals["Value055"]).Value1 : ((double?)null), | |
Value056 = doc.NumVals.ContainsKey("Value056") && doc.NumVals["Value056"] != null ? (doc.NumVals["Value056"]).Value1 : ((double?)null), | |
Value057 = doc.NumVals.ContainsKey("Value057") && doc.NumVals["Value057"] != null ? (doc.NumVals["Value057"]).Value1 : ((double?)null), | |
Value058 = doc.NumVals.ContainsKey("Value058") && doc.NumVals["Value058"] != null ? (doc.NumVals["Value058"]).Value1 : ((double?)null), | |
Value059 = doc.NumVals.ContainsKey("Value059") && doc.NumVals["Value059"] != null ? (doc.NumVals["Value059"]).Value1 : ((double?)null), | |
Value060 = doc.NumVals.ContainsKey("Value060") && doc.NumVals["Value060"] != null ? (doc.NumVals["Value060"]).Value1 : ((double?)null), | |
Value061 = doc.NumVals.ContainsKey("Value061") && doc.NumVals["Value061"] != null ? (doc.NumVals["Value061"]).Value1 : ((double?)null), | |
Value062 = doc.NumVals.ContainsKey("Value062") && doc.NumVals["Value062"] != null ? (doc.NumVals["Value062"]).Value1 : ((double?)null), | |
Value063 = doc.NumVals.ContainsKey("Value063") && doc.NumVals["Value063"] != null ? (doc.NumVals["Value063"]).Value1 : ((double?)null), | |
Value064 = doc.NumVals.ContainsKey("Value064") && doc.NumVals["Value064"] != null ? (doc.NumVals["Value064"]).Value1 : ((double?)null), | |
Value065 = doc.NumVals.ContainsKey("Value065") && doc.NumVals["Value065"] != null ? (doc.NumVals["Value065"]).Value1 : ((double?)null), | |
Value066 = doc.NumVals.ContainsKey("Value066") && doc.NumVals["Value066"] != null ? (doc.NumVals["Value066"]).Value1 : ((double?)null), | |
Value067 = doc.NumVals.ContainsKey("Value067") && doc.NumVals["Value067"] != null ? (doc.NumVals["Value067"]).Value1 : ((double?)null), | |
Value068 = doc.NumVals.ContainsKey("Value068") && doc.NumVals["Value068"] != null ? (doc.NumVals["Value068"]).Value1 : ((double?)null), | |
Value069 = doc.NumVals.ContainsKey("Value069") && doc.NumVals["Value069"] != null ? (doc.NumVals["Value069"]).Value1 : ((double?)null), | |
Value070 = doc.NumVals.ContainsKey("Value070") && doc.NumVals["Value070"] != null ? (doc.NumVals["Value070"]).Value1 : ((double?)null), | |
Value071 = doc.NumVals.ContainsKey("Value071") && doc.NumVals["Value071"] != null ? (doc.NumVals["Value071"]).Value1 : ((double?)null), | |
Value072 = doc.NumVals.ContainsKey("Value072") && doc.NumVals["Value072"] != null ? (doc.NumVals["Value072"]).Value1 : ((double?)null), | |
Value073 = doc.NumVals.ContainsKey("Value073") && doc.NumVals["Value073"] != null ? (doc.NumVals["Value073"]).Value1 : ((double?)null), | |
Value074 = doc.NumVals.ContainsKey("Value074") && doc.NumVals["Value074"] != null ? (doc.NumVals["Value074"]).Value1 : ((double?)null), | |
Value075 = doc.NumVals.ContainsKey("Value075") && doc.NumVals["Value075"] != null ? (doc.NumVals["Value075"]).Value1 : ((double?)null), | |
Value076 = doc.NumVals.ContainsKey("Value076") && doc.NumVals["Value076"] != null ? (doc.NumVals["Value076"]).Value1 : ((double?)null), | |
Value077 = doc.NumVals.ContainsKey("Value077") && doc.NumVals["Value077"] != null ? (doc.NumVals["Value077"]).Value1 : ((double?)null), | |
Value078 = doc.NumVals.ContainsKey("Value078") && doc.NumVals["Value078"] != null ? (doc.NumVals["Value078"]).Value1 : ((double?)null), | |
}; | |
} | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment