Eventuali duplicati:
Yield In VB.NETÈ possibile implementare il rendimento restituito per le funzioni IEnumerable in VB.NET?
In C#, quando si scrive una funzione che restituisce un IEnumerble<>
, è possibile utilizzare yield return
per restituire un singolo elemento dell'enumerazione e yield break;
a significare nessun residuo elementi. Qual è la sintassi VB.NET per fare la stessa cosa?
Un esempio dal codice NerdDinner:
public IEnumerable<RuleViolation> GetRuleViolations() {
if (String.IsNullOrEmpty(Title))
yield return new RuleViolation("Title required","Title");
if (String.IsNullOrEmpty(Description))
yield return new RuleViolation("Description required","Description");
if (String.IsNullOrEmpty(HostedBy))
yield return new RuleViolation("HostedBy required", "HostedBy");
if (String.IsNullOrEmpty(Address))
yield return new RuleViolation("Address required", "Address");
if (String.IsNullOrEmpty(Country))
yield return new RuleViolation("Country required", "Country");
if (String.IsNullOrEmpty(ContactPhone))
yield return new RuleViolation("Phone# required", "ContactPhone");
if (!PhoneValidator.IsValidNumber(ContactPhone, Country))
yield return new RuleViolation("Phone# does not match country", "ContactPhone");
yield break;
}
Questo convert C# to VB.NET tool dà un "YieldStatement non è supportato" errore.
Si noti che il rendimento non sta ritornando, almeno non nel senso che la maggior parte delle persone intende tornare (il modo in cui è implementato sotto il cofano nonostante). Inoltre, non hai bisogno di interruzioni di rendimento lì.Inoltre, si potrebbe voler pensare a trasformare quel codice da una enumerazione di oggetti RuleViolation a una enumerazione di Func delegati. –
yfeldblum
L'utilizzo di yield mi ricorda le piping in cui il codice chiamante può iniziare a scorrere l'ienumerable * prima che * la funzione che restituisce l'ienumerable abbia finito di funzionare. Molto bello! –
Questo è un esempio terribile, perché non hai bisogno di voi per qualcosa del genere: qual è il vantaggio di determinare le violazioni delle regole pigramente? Riempi tutti in una lista e finisci. Questo non vuol dire che yeild non è utile, ma questo è solo un cattivo esempio – piers7