是否有任何解决方案以更好/更短的方式重构切换/案例代码?
property.Value
是JToken
opportunity
是CRM Dynamics实体(类似于词典)我尝试了以下方法但没有成功(这是不可接受的C#)
Type target = property.Value.Type.GetType();
opportunity[property.Key] = property.Value.Value<target>();
这是我试图简化的代码。 (JTokenType.Object
和JTokenType.Array
以不同的方式处理。)
switch (property.Value.Type)
{
case JTokenType.Boolean:
opportunity[property.Key] = property.Value.Value<bool>();
break;
case JTokenType.Date:
opportunity[property.Key] = property.Value.Value<DateTime>();
break;
case JTokenType.Integer:
opportunity[property.Key] = property.Value.Value<int>();
break;
case JTokenType.String:
opportunity[property.Key] = property.Value.Value<string>();
break;
case JTokenType.Guid:
opportunity[property.Key] = property.Value.Value<Guid>();
break;
}
我也按照@diiN _:
的建议尝试了这个opportunity[property.Key] = property.Value.Value<dynamic>();
答案 0 :(得分:4)
您可以尝试使用此代替您的switch语句:
if (property.Value is JValue)
{
opportunity[property.Key] = ((JValue)property.Value).Value;
}
答案 1 :(得分:0)
不确定它是否对您的情况有帮助,但我使用了类似的代码。也许试一试。
cursor = db.rawQuery(
"SELECT *
FROM STUDENT
LEFT JOIN STUDENT_DETAILS ON
STUDENT.STUDENT_ID=STUDENT_DETAILS.STUDENT_ID
WHERE STUDENT.START_DATE <= ? AND STUDENT.EXPIRED_DATE >= ?
ORDER BY STUDENT_DETAILS.STUDENT_NAME ASC",
new String[]{date, date}
);