我有一个.net核心应用,我有两个方法。一种是概述页面,另一种是细节页面。
这两种方法,都使用两种不同的方法。但是这两种不同的方法几乎是相同的。在每种方法中,pas只是一个不同的参数:
所以这是两种几乎相同的方法:
public class EcheqSubmission{
public EcheqSubmissionStatusApi StatusDbToApi(EcheqSubmissionStatus dbStatus, EcheqSubmissionInfoApi echeqSubmissionInfoApi)
{
EcheqSubmissionStatusApi status;
// EcheqSubmissionInfoApi echeqSubmissionInfoApi = new EcheqSubmissionInfoApi();
if (echeqSubmissionInfoApi.ValidUntilUtc < DateTime.Now)
{
return EcheqSubmissionStatusApi.Expired;
}
else
{
switch (dbStatus)
{
case EcheqSubmissionStatus.New:
status = EcheqSubmissionStatusApi.New;
break;
case EcheqSubmissionStatus.Active:
status = EcheqSubmissionStatusApi.Active;
break;
case EcheqSubmissionStatus.Submitted:
status = EcheqSubmissionStatusApi.Submitted;
break;
default:
throw new ArgumentOutOfRangeException(nameof(dbStatus), dbStatus, "Not a valid status enum");
}
}
return status
}
public EcheqSubmissionStatusApi StatusDbToApi(EcheqSubmissionStatus dbStatus, EcheqSubmissionApi echeqSubmissionInfoApi)
{
EcheqSubmissionStatusApi status;
// EcheqSubmissionInfoApi echeqSubmissionInfoApi = new EcheqSubmissionInfoApi();
if (echeqSubmissionInfoApi.ValidUntilUtc < DateTime.Now)
{
return EcheqSubmissionStatusApi.Expired;
}
else
{
switch (dbStatus)
{
case EcheqSubmissionStatus.New:
status = EcheqSubmissionStatusApi.New;
break;
case EcheqSubmissionStatus.Active:
status = EcheqSubmissionStatusApi.Active;
break;
case EcheqSubmissionStatus.Submitted:
status = EcheqSubmissionStatusApi.Submitted;
break;
default:
throw new ArgumentOutOfRangeException(nameof(dbStatus), dbStatus, "Not a valid status enum");
}
}
return status;
}
}
}
这是两种使用几乎相同方法的方法: 因此,此方法用于详细信息页面
private static EcheqSubmissionApi ConvertToApi(EcheqSubmission submission, EcheqDefinition definition,
bool includeAnswers, bool includePages, string assignedByName)
{
var result = new EcheqSubmissionApi
{
Id = submission.Id,
SubmittedOnUtc = submission.SubmittedOnUtc,
AssignedByOrgId = submission.AssignedByOrgId,
AssignedByProfId = submission.AssignedByProfId,
AssignedByProfName = assignedByName,
AssignedOnUtc = submission.AssignedOnUtc,
AssignedToId = submission.AssignedToId,
ValidUntilUtc = submission.ValidUntilUtc,
// Status = submission.Status.StatusDbToApi(),
Definition = definition != null ? EcheqDefinitionConverter.DefinitionDbToApi(definition, noPages: !includePages) : null,
Answers = includeAnswers ? submission.Answers : null,
InitialValues = includeAnswers ? submission.InitialValues : null,
CurrentPage = submission.CurrentPage,
Progress = submission.Progress
};
result.Status = submission.StatusDbToApi(submission.Status, result);
return result;
}
并且此方法用于概述页面:
private static EcheqSubmissionInfoApi ConvertToPartialApi(EcheqSubmission submission)
{
var result = new EcheqSubmissionInfoApi
{
Id = submission.Id,
//Status = submission.StatusDbToApi(submission.Status,),
DefinitionId = submission.DefinitionId,
SubmittedOnUtc = submission.SubmittedOnUtc,
AssignedByOrgId = submission.AssignedByOrgId,
AssignedByProfId = submission.AssignedByProfId,
AssignedOnUtc = submission.AssignedOnUtc,
AssignedToId = submission.AssignedToId,
ValidUntilUtc = submission.ValidUntilUtc,
CurrentPage = submission.CurrentPage,
Progress = submission.Progress
};
result.Status = submission.StatusDbToApi(submission.Status, result);
return result;
}
所以我的问题是:如何在on方法中结合两个switch case方法?
谢谢
像这样:
public EcheqSubmissionStatusApi StatusDbToApi(EcheqSubmissionStatus dbStatus, EcheqSubmissionInfoApi echeqSubmissionInfoApi = null, EcheqSubmissionApi echeqSubmissionoApi = null)
{
EcheqSubmissionStatusApi status;
var validuntil = echeqSubmissionInfoApi != null ? echeqSubmissionInfoApi.ValidUntilUtc : (echeqSubmissionoApi != null ? echeqSubmissionoApi.ValidUntilUtc : null);
if (validuntil < DateTime.Now)
{
return EcheqSubmissionStatusApi.Expired;
}
else
{
switch (dbStatus)
{
case EcheqSubmissionStatus.New:
status = EcheqSubmissionStatusApi.New;
break;
case EcheqSubmissionStatus.Active:
status = EcheqSubmissionStatusApi.Active;
break;
case EcheqSubmissionStatus.Submitted:
status = EcheqSubmissionStatusApi.Submitted;
break;
case EcheqSubmissionStatus.Expired:
status = EcheqSubmissionStatusApi.Expired;
break;
default:
throw new ArgumentOutOfRangeException(nameof(dbStatus), dbStatus, "Not a valid status enum");
}
}
return status;
}
我已经做到了:
public static EcheqSubmissionStatusApi StatusDbToApi(this EcheqSubmissionStatus dbStatus, DateTime dateTime)
那我要在这里通过什么呢?
Status = submission.Status.StatusDbToApi( ),
我这样子:
public EcheqSubmissionStatusApi StatusDbToApi(EcheqSubmissionStatus dbStatus, DateTime ValidUntilUtc)
{
EcheqSubmissionStatusApi status;
if (ValidUntilUtc < DateTime.Now)
{
return EcheqSubmissionStatusApi.Expired;
}
else
{
switch (dbStatus)
{
case EcheqSubmissionStatus.New:
status = EcheqSubmissionStatusApi.New;
break;
case EcheqSubmissionStatus.Active:
status = EcheqSubmissionStatusApi.Active;
break;
case EcheqSubmissionStatus.Submitted:
status = EcheqSubmissionStatusApi.Submitted;
break;
case EcheqSubmissionStatus.Expired:
status = EcheqSubmissionStatusApi.Expired;
break;
default:
throw new ArgumentOutOfRangeException(nameof(dbStatus), dbStatus, "Not a valid status enum");
}
}
return status;
这:
private static EcheqSubmissionApi ConvertToApi(EcheqSubmission submission, EcheqDefinition definition,
bool includeAnswers, bool includePages, string assignedByName)
{
var result = new EcheqSubmissionApi
{
Id = submission.Id,
SubmittedOnUtc = submission.SubmittedOnUtc,
AssignedByOrgId = submission.AssignedByOrgId,
AssignedByProfId = submission.AssignedByProfId,
AssignedByProfName = assignedByName,
AssignedOnUtc = submission.AssignedOnUtc,
AssignedToId = submission.AssignedToId,
ValidUntilUtc = submission.ValidUntilUtc,
Status = submission.StatusDbToApi(result.ValidUntilUtc),
Definition = definition != null ? EcheqDefinitionConverter.DefinitionDbToApi(definition, noPages: !includePages) : null,
Answers = includeAnswers ? submission.Answers : null,
InitialValues = includeAnswers ? submission.InitialValues : null,
CurrentPage = submission.CurrentPage,
Progress = submission.Progress
};
result.Status = submission.StatusDbToApi(submission.Status, result.ValidUntilUtc);
return result;
}
但是我得到这个错误:
cannot use local variable, before it is used
Status = submission.StatusDbToApi(result.ValidUntilUtc),
答案 0 :(得分:0)
解决方案1:通过创建通用基类
DateSubmitted
调用方法
public class EcheqSubmissionBase
{
public string ValidUntilUtc { get; set; }
}
public class EcheqSubmissionStatus : EcheqSubmissionBase
{
public string NonCommonPropertyX { get; set; }
}
public class EcheqSubmissionInfoApi : EcheqSubmissionBase
{
public string NonCommonPropertyY { get; set; }
}
一个以基类为参数的方法
var _dbstatusobj = new EcheqSubmissionStatus();
var EcheqSubmissionInfoApiObject = new EcheqSubmissionInfoApi();
var result = StatusDbToApi(_dbstatusobj, EcheqSubmissionInfoApi);
解决方案2:可选参数
public EcheqSubmissionStatusApi StatusDbToApi(EcheqSubmissionStatus dbStatus, EcheqSubmissionBase EcheqSubmissionBase)
{
EcheqSubmissionStatusApi status;
// EcheqSubmissionInfoApi echeqSubmissionInfoApi = new EcheqSubmissionInfoApi();
if (EcheqSubmissionBase.ValidUntilUtc < DateTime.Now)
{
return EcheqSubmissionStatusApi.Expired;
}
else
{
switch (dbStatus)
{
case EcheqSubmissionStatus.New:
status = EcheqSubmissionStatusApi.New;
break;
case EcheqSubmissionStatus.Active:
status = EcheqSubmissionStatusApi.Active;
break;
case EcheqSubmissionStatus.Submitted:
status = EcheqSubmissionStatusApi.Submitted;
break;
default:
throw new ArgumentOutOfRangeException(nameof(dbStatus), dbStatus, "Not a valid status enum");
}
}
return status
}