Skip to content

Instantly share code, notes, and snippets.

@myarichuk
Created October 24, 2017 15:59
Show Gist options
  • Save myarichuk/db2a290ec8ae5ea0faf2698b0c5b02c2 to your computer and use it in GitHub Desktop.
Save myarichuk/db2a290ec8ae5ea0faf2698b0c5b02c2 to your computer and use it in GitHub Desktop.
InvalidProgramException reproduction
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