Another alternative could be with the operator switch:
public override Func<JObject, dynamic, string> version => (jobject, parameters) =>
{
bool hasValidObject = false;
foreach (char n in "12346")
{
var jObj = jobject["Version" + n];
if (jObj != null)
{
var versionInfo = new VersionInfo(jObj.Value<string>());
switch (n)
{
case '1': _radio.Version1 = versionInfo; break;
case '2': _radio.Version2 = versionInfo; break;
case '3': _radio.Version3 = versionInfo; break;
case '4': _radio.Version4 = versionInfo; break;
case '6': _radio.Version6 = versionInfo; break;
}
hasValidObject = true;
}
}
return hasValidObject ? GenerateSuccess() : GenerateUnsuccessful(" try again.");
};
or a more advanced version with an array of delegates .. because I like the vertical space:] (also not verified):
public override Func<JObject, dynamic, string> version => (jobject, parameters) =>
{
Func<VersionInfo, VersionInfo>[] a = { null, _radio.Version1 = v,
v => _radio.Version2 = v, v => _radio.Version3 = v,
v => _radio.Version4 = v, null, v => _radio.Version6 = v };
var q = from n in new[] { 1, 2, 3, 4, 6 }
let j = jobject["Version" + n] where j != null
select a[n](new VersionInfo(j.Value<string>()));
return q.Count() > 0 ? GenerateSuccess() : GenerateUnsuccessful(" try again.");
};
source
share