편집 : 의견을 읽고 함수 작성자에게 문의하십시오.
Func<int, Func<List<IUser>, bool>> createFn = (min) =>
(l) => (l.Count(u => u.FirstName == "John") > min);
Func<List<IUser>, bool>> contains0 = createFn(0);
Assert.AreEqual(true, contains0(userList));
Func<List<IUser>, bool>> contains3 = createFn(3);
Assert.AreEqual(true, contains3(userList));
1 요소 배열을 사용해보십시오. 추악하지만 작동합니다.
var values = new int[] { 0 };
Expression<Func<List<IUser>, bool>> ulContainsJohn =
(l => l.Where(u => u.FirstName == "John").Count() > values[0]);
Assert.AreEqual(true, ulContainsJohn.Compile()(userList));
values[0] = 3;
Assert.AreEqual(true, ulContainsJohn.Compile()(userList));
또 다른 옵션, 더 나은 :
private int Minimum { get; set; }
...
Expression<Func<List<IUser>, bool>> ulContainsJohn =
(l => l.Where(u => u.FirstName == "John").Count() > Minimum);
Func<List<IUser>, bool> fn = ulContainsJohn.Compile();
Assert.AreEqual(true, fn(userList));
Minimum = 3;
Assert.AreEqual(true, fn(userList));
이유는 무엇입니까? 표현 트리를 구문 분석하려고합니까? – SLaks
당신은 역설을 가지고 있습니다 ... 당신은 상수 표현을 원하지만 당신의 시험은 그것을 바꿀 것입니까? – Nix
함수 ulContainsJohn 내에서 상수 표현식으로 min bound 값을 원합니다. 분이 변경 될 수있는 경우, 함수 내에서 바인드 된 값은 변경되지 않아야합니다. 그게 지금 말이 되니? – Shlomo