无需在每个案例上添加大括号{}并将代码添加到每个案例中。有没有更简单的方法来做到这一点?目前我得到一个错误,我在下面的方式,并试图避免使用大括号,并为每个案例添加相同的代码。有任何想法吗?感谢。
private int GetMemberInfoByID(string strMemberID, int intAVersion)
{
try
{
switch (intAVersion)
{
case (int)A_Version.A6:
dbA6ReplDataContext mbr = new dbA6ReplDataContext();
break;
case (int)A_Version.A7:
dbA7ReplDataContext mbr = new dbA7ReplDataContext();
break;
}
var member = (
from m in mbr.MEMBERs
join ma in mbr.ADDRESSes on "S " + m.CONTRACT_NBR equals ma.ADDR_WHO
where m.MEMBER_NBR == strMemberID
&& (ma.VOID[0] != 'V'
select ma.YMDEND).ToList();
if (member == null || member.Count == 0)
return Int32.Parse(DateTime.Now.ToString("yyyyMMdd"));
else
return member.Max();
}
catch (Exception ex)
{
cError err = new cError();
err.ErrorMessage(ex);
err = null;
return Int32.Parse(DateTime.Now.ToString("yyyyMMdd"));
}
}
答案 0 :(得分:2)
好像是dbA6ReplDataContext
& dbA7ReplDataContext
类非常相似。如果是这种情况,最好的方法是为他们两个创建一个公共接口。将变量声明为该类型。
IReplDataContext mbr = null;
switch (intAVersion)
{
case (int)A_Version.A6:
mbr = new dbA6ReplDataContext();
break;
case (int)A_Version.A7:
mbr = new dbA7ReplDataContext();
break;
}
使用公共接口(示例中为IReplDataContext
)将允许您继续使用两种类型之间的相似性,同时仍提供类型安全性。
答案 1 :(得分:1)
您可以使用dynamic
键入以避免重复代码,但代价是丢失编译时检查:
dynamic mbr = null;
switch (intAVersion)
{
case (int)A_Version.A6:
mbr = new dbA6ReplDataContext();
break;
case (int)A_Version.A7:
mbr = new dbA7ReplDataContext();
break;
}
由您添加所需的任何验证,例如null
检查以防intAVersion
无效。