c# - Cannot implicitly convert anonymous type #1[] to anonymous type #2[] -
i have following scenario:
public jsonresult changefilterlist(int option) { var data = new[] { new { text = "unknown option", value = -1 } }; switch (option) { case 2: data = _departmentnamerepository.all.select(x => new { text = x.deptname, value = x.id }).toarray(); break; case 3: data = session["projectid"] == null ? _assetsequencerepository.all.select(x => new { text = x.assetshotname, value = x.id }).toarray() : _assetsequencerepository.findby(p => p.projectid == (int)session["projectid"]).select(x => new { text = x.assetshotname, value = x.id }).toarray(); break; default: data = _userrepository.all.select(x => new { text = x.displayname, value = x.userid }).toarray(); break; } return json(data, jsonrequestbehavior.allowget); } case2 , default looks great complains on case 3 (conditional) saying: cannot implicitly convert type 'anonymoustype#1[]' 'anonymoustype#2[]'. shouldn't ?: able decide type since have provided blueprint anonymous var data = new[] { new { text = "unknown option", value = -1 } };.
solution:
@darin dimitrov answer great want have test anonymous types (simple cases need it). @douglas suspects : assetsequencerepository supplying id long , anonymous value goes in favor of int not long. since c# compiler not implicitly cast long int, got error. compiling snippet is:
public jsonresult changefilterlist(int option = 3) { var data = new[] { new { text = "unknown option", value = long.maxvalue } }; switch (option) { case 2: data = _departmentnamerepository.all.select(x => new { text = x.deptname, value = (long)x.id }).toarray(); break; case 3: data = session["projectid"] == null ? _assetsequencerepository.all.select(x => new { text = x.assetshotname, value = x.id }).toarray() : _assetsequencerepository.findby(p => p.projectid == (int)session["projectid"]).select(x => new { text = x.assetshotname, value = x.id }).toarray(); break; default: data = _userrepository.all.select(x => new { text = x.displayname, value = (long)x.userid }).toarray(); break; } return json(data, jsonrequestbehavior.allowget); }
my guess findby method returns objects properties have different types ones you're expecting (e.g. int? instead of int). try specifying type cast ensure anonymous type has correct definition:
case 3: data = session["projectid"] == null ? _assetsequencerepository.all.select(x => new { text = x.assetshotname, value = x.id }).toarray() : _assetsequencerepository.findby(p => p.projectid == (int)session["projectid"]).select(x => new { text = (string)x.assetshotname, value = (int)x.id }).toarray(); break; the key change is:
new { text = (string)x.assetshotname, value = (int)x.id }) ↖ explicit type casts ↗
Comments
Post a Comment