Page 1 of 1

So beschränken Sie einen Parameter so, dass er nur Methoden akzeptiert, die yield enthalten

Posted: 04 Jan 2025, 06:38
by Guest
Ich habe zwei Arten von Methoden. Einer gibt einen IEnumerator zurück, der andere gibt einen IEnumerator zurück:

Code: Select all

public IEnumerator NonYielding_Method( float foo )
{
return YieldingLazyEvaluated_Method(foo);
}

public IEnumerator YieldingLazyEvaluated_Method( float foo )
{
yield return null;
}

public void Queue( IEnumerator seq )
{
myList.Add(seq);
}
Ist es möglich, zu erkennen, ob es sich bei einer Methode um die eine oder andere handelt, oder sogar die Verwendung des nicht nachgebenden Typs zu verweigern?

Code: Select all

public void Test()
{
Queue( YieldingLazyEvaluated_Method(1F) );  //works already, lazily evaluated
Queue( NonYielding_Method(1F) );            //i need this be denied by compiler error (due to it being eagerly evaluated and therefore instantly executed)
}
Ich kenne die Problemumgehungen (z. B. könnte ich einfach die nicht nachgebende Methode „Yielding“ verwenden), aber ich möchte Fehler vermeiden, deshalb war ich neugierig, ob ich das durch eine Typbeschränkung erkennen könnte.< /P>