LINQ 문 또는 람다를 사용하여 다음을 구현할 수 있는지 궁금합니다. 나는이 두 가지를 처음 접했으므로 어떻게 코드화 될지 잘 모르겠습니다. 여러 콜백을 추가 할 수있는 Func <> 위임을 가져 와서 모든 반환 값의 부울 AND 표현식으로 평가하도록하는 것이 그 의도입니다. 선호되는 솔루션은 단일 false가 나머지 평가를 단락시킬 수있게합니다. 나는 무력 방식이 구현, 다음과 같이 코드와 출력은 같습니다 어떤 제안에 대한LINQ 또는 lambda를 사용하여 구현하는 방법은 무엇입니까?
using System;
using System.Diagnostics;
using System.Windows.Forms;
namespace TestHarness
{
public partial class Form1 : Form
{
Func<bool, bool, bool, bool> validPosition;
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
validPosition += Func1;
validPosition += Func2;
validPosition += Func3;
Delegate[] delegates = validPosition.GetInvocationList();
bool composite = true;
int i = 0;
foreach (Func<bool, bool, bool, bool> d in delegates)
{
composite = composite & d(false, true, true);
if (!composite)
break;
++i;
}
Debug.WriteLine("Result: " + composite + "\tIterations: " + i);
composite = true;
i = 0;
foreach (Func<bool, bool, bool, bool> d in delegates)
{
composite = composite & d(true, false, true);
if (!composite)
break;
++i;
}
Debug.WriteLine("Result: " + composite + "\tIterations: " + i);
composite = true;
i = 0;
foreach (Func<bool, bool, bool, bool> d in delegates)
{
composite = composite & d(true, true, false);
if (!composite)
break;
++i;
}
Debug.WriteLine("Result: " + composite + "\tIterations: " + i);
composite = true;
i = 0;
foreach (Func<bool, bool, bool, bool> d in delegates)
{
composite = composite & d(true, true, true);
if (!composite)
break;
++i;
}
Debug.WriteLine("Result: " + composite + "\tIterations: " + i);
}
bool Func1(bool a, bool b, bool c)
{
return a;
}
bool Func2(bool a, bool b, bool c)
{
return b;
}
bool Func3(bool a, bool b, bool c)
{
return c;
}
}
}
Output:
Result: False Iterations: 0
Result: False Iterations: 1
Result: False Iterations: 2
Result: True Iterations: 3
감사합니다.
이에 주제 여기있는 동안; CodeReview.SE로 이동하여 코드 문제를 해결할 것을 고려해 볼 수 있습니다. – BradleyDotNET
거기에 아무런 힘이 없습니다. 또한이 카운트가 정말로 필요합니까? –
이것을 간단한 술어'Func'로 줄이면'&& '연산자로 연결하여 단락 문자를 사용할 수 있습니다. 그러나 나는 당신이 성취하려는 것을 확신하지 못합니다. 더 큰 그림은 무엇입니까? –