C#/LINQ错误:名为';mbr&x27;已在此范围中定义
不必在每个案例上都加上大括号{}并将代码添加到每个案例中。有没有更简单的方法?目前,按照下面的方法,我遇到了一个错误,我试图避免使用大括号,并在每种情况下添加相同的代码。有什么想法吗?谢谢C#/LINQ错误:名为';mbr&x27;已在此范围中定义,c#,linq,switch-statement,case-statement,C#,Linq,Switch Statement,Case Statement,不必在每个案例上都加上大括号{}并将代码添加到每个案例中。有没有更简单的方法?目前,按照下面的方法,我遇到了一个错误,我试图避免使用大括号,并在每种情况下添加相同的代码。有什么想法吗?谢谢 private int GetMemberInfoByID(string strMemberID, int intAVersion) { try { switch (intAVersion)
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"));
}
}
您可以使用
dynamic
键入以避免以丢失编译时检查为代价复制代码:
dynamic mbr = null;
switch (intAVersion)
{
case (int)A_Version.A6:
mbr = new dbA6ReplDataContext();
break;
case (int)A_Version.A7:
mbr = new dbA7ReplDataContext();
break;
}
如果
intAVersion
无效,您可以添加任何需要的验证,例如null
检查。您可以使用动态
键入以避免以丢失编译时检查为代价重复代码:
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
无效的情况下进行检查。看起来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
,在本例中)将允许您继续使用两种类型之间的相似性,同时仍然提供类型安全性 似乎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
,在本例中)将允许您继续使用两种类型之间的相似性,同时仍然提供类型安全性 如果它们没有基类,则必须复制code@DarrenYoung我也这么想,直到我意识到每个街区的类型都不一样。是的,对不起。我的错!实际上,唯一的解决方案(如果您不想确定它的范围)是让dbA6ReplDataContext和dbA7ReplDataContext都派生自某个公共基类。然后,您可以在switchBase类或接口最干净之前声明基类类型的mbr变量<代码>动态可以工作,但您至少不会有intellisense或编译时验证。如果它们没有基类,则必须复制code@DarrenYoung我也这么想,直到我意识到每个街区的类型都不一样。是的,对不起。我的错!实际上,唯一的解决方案(如果您不想确定它的范围)是让dbA6ReplDataContext和dbA7ReplDataContext都派生自某个公共基类。然后,您可以在switchBase类或接口最干净之前声明基类类型的mbr变量<代码>动态可能会起作用,但您至少不会有intellisense或编译时验证。应该提到的是,问题中声明的“mbr”与使用它的位置在不同的范围内。这个解决方案也解决了这个问题。可能应该提到的是,问题中声明的“mbr”与使用它的范围不同。这个解决方案也解决了这个问题。