C#/ LINQ错误:一个名为' mbr'的局部变量已在此范围内定义

时间:2016-11-23 17:35:50

标签: c# linq switch-statement case-statement

无需在每个案例上添加大括号{}并将代码添加到每个案例中。有没有更简单的方法来做到这一点?目前我得到一个错误,我在下面的方式,并试图避免使用大括号,并为每个案例添加相同的代码。有任何想法吗?感谢。

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"));
            }
        }

2 个答案:

答案 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无效。