여기에 불완전하고 깨진 예제가 있습니다. 모델과 속성을 고려한 다른 함수에 함수를 전달할 수 있는지 알고 싶었습니까? 내 뜻을 아래의 예문에 적어주십시오.함수를 다른 모델로 호출하기 위해 C#의 다른 함수에 전달하기
private void ValidateSurvey(Survey survey)
{
// lines 1 to 10, or 1 to 8 or 11 to 16, etc
for (var i = survey.FirstLine; i <= survey.LastLine; i++)
{
IsAnswerValid(survey, "1.1.1", i, /* some rules to apply here i.e. [TModel] != null && [TModel].Value == "foo" */)
}
}
private bool IsAnswerValid<TAnswer>(
Survey survey,
string rowName,
int lineNumber,
Func<TAnswer, bool> answerValueValidator
) where TAnswer : Answer
{
if (survey == null)
throw new ArgumentNullException("survey");
if (answerValueValidator == null)
throw new ArgumentNullException("answerValueValidator");
if (string.IsNullOrWhiteSpace(rowName))
throw new ArgumentNullException("Null/blank rowName specified");
if(lineNumber < 0)
throw new ArgumentOutOfRangeException("lineNumber must be positive");
// get answer list for the required row
var answerList = survey.Rows
.Where(
r => r.Name.Trim().ToLower() == rowName.Trim().ToLower() && r.Answers != null
).SelectMany(a => a.Answers);
// get the first relevant answer for the line number specified
var answer = answerList.FirstOrDefault(a => a.LineNumber == lineNumber);
return answerValueValidator(answer);
//return (answer != null && answer.Value);
}
업데이트 : 람다 사용과 응답에 따라 제네릭의 제거를 보여, 지금 바로 표시되지 인텔리의 원인이 구문 오류를 통해 자신을 혼란에 대한 유감 작동, 잘하면 사람이 유용한
을 찾을 수 있습니다private void ValidateSurvey(Survey survey)
{
// lines 1 to 10, or 1 to 8 or 11 to 16, etc
for (var i = survey.FirstLine; i <= survey.LastLine; i++)
{
IsAnswerValid(survey, "1.1.1", i, a => a != null && a.Value = "foo")
}
}
private bool IsAnswerValid(
Survey survey,
string rowName,
int lineNumber,
Func<Answer, bool> answerValueValidator
)
{
if (survey == null)
throw new ArgumentNullException("survey");
if (answerValueValidator == null)
throw new ArgumentNullException("answerValueValidator");
if (string.IsNullOrWhiteSpace(rowName))
throw new ArgumentNullException("Null/blank rowName specified");
if(lineNumber < 0)
throw new ArgumentOutOfRangeException("lineNumber must be positive");
// get answer list for the required row
var answerList = survey.Rows
.Where(
r => r.Name.Trim().ToLower() == rowName.Trim().ToLower() && r.Answers != null
).SelectMany(a => a.Answers);
// get the first relevant answer for the line number specified
var answer = answerList.FirstOrDefault(a => a.LineNumber == lineNumber);
return answerValueValidator(answer);
}
아마 일반적인되어서는 안된다는. – SLaks
@ 실례합니다. 나는 또 다른 모습을 보였고 제네릭 사용은 필요하지 않았다. 그것은 내가 다시 혼란스러워했다. 감사합니다 – Pricey
'String.Equals (x, y. SrtingComparison.OrdinalIgnoreCase)' – SLaks