In C # puoi usare un ciclo for senza dichiarare il corpo, qual è il vantaggio di usarlo nel codice di produzione anziché usare un ciclo foreach
?
Esempio
I miei esempi qui sotto usano il reflection per ottenere il valore della proprietà di un oggetto basato sul parametro p_strPropertyPath
. Il metodo può anche esaminare la proprietà di una proprietà, ad esempio MyClass.Property.SubProperty
.
Secondo me, il ciclo foreach
è più ovvio in ciò che dovrebbe fare, mentre il primo mi sembra più pulito.
Body-less For
Loop
L'esempio seguente utilizza un ciclo for-body senza corpo e un enumeratore:
private string GetValue(MyClass p_objProperty, string p_strPropertyPath)
{
string[] lstProperties = p_strPropertyPath.Split('.');
IEnumerator objEnumerator = lstProperties.GetEnumerator();
object objValue;
for (
objValue = p_objProperty;
objValue != null && objEnumerator.MoveNext();
objValue = objValue.GetType().GetProperty(objEnumerator.Current as string).GetValue(objValue)
) ;
return Convert.ToString(objValue);
}
foreach
ciclo
L'esempio seguente utilizza un ciclo foreach
:
private string GetValue(MyClass p_objProperty, string p_strPropertyPath)
{
string[] lstProperties = p_strPropertyPath.Split('.');
object objValue = p_objProperty;
foreach (string strProperty in lstProperties)
{
objValue = objValue.GetType().GetProperty(strProperty).GetValue(objValue);
if(objValue == null) break;
}
return Convert.ToString(objValue);
}