Ben ifade ağaçlar ayrıştırma ile deniyorum ve aşağıdaki kodu yazdım: kodunC#: String parametresi gizemli şekilde sıfırlanacak şekilde sıfırlandı - lütfen yardım edin!
private void TestExpressionTree()
{
Expression<Func<int, bool>> expression = x => x == 1 || x == 2;
string output = String.Empty;
HandleExpression(expression.Body, output);
Output("Output", output);
}
private void HandleExpression(Expression expression, string output)
{
switch (expression.NodeType)
{
case ExpressionType.Conditional:
HandleConditionalExpression(expression, output);
break;
case ExpressionType.OrElse:
HandleOrElseExpression(expression, output);
break;
case ExpressionType.Equal:
HandleEqualExpression(expression, output);
break;
case ExpressionType.Parameter:
HandleParameterExpression(expression, output);
break;
case ExpressionType.Constant:
HandleConstantExpression(expression, output);
break;
}
}
private void HandleConditionalExpression(Expression expression, string output)
{
ConditionalExpression conditionalExpression = (ConditionalExpression) expression;
HandleExpression(conditionalExpression.Test, output);
}
private void HandleOrElseExpression(Expression expression, string output)
{
BinaryExpression binaryExpression = (BinaryExpression)expression;
HandleExpression(binaryExpression.Left, output);
output += "||";
HandleExpression(binaryExpression.Right, output);
}
private void HandleEqualExpression(Expression expression, string output)
{
BinaryExpression binaryExpression = (BinaryExpression)expression;
HandleExpression(binaryExpression.Left, output);
output += "=";
HandleExpression(binaryExpression.Right, output);
}
private void HandleParameterExpression(Expression expression, string output)
{
ParameterExpression parameterExpression = (ParameterExpression)expression;
output += parameterExpression.Name;
}
private void HandleConstantExpression(Expression expression, string output)
{
ConstantExpression constantExpression = (ConstantExpression)expression;
output += constantExpression.Value.ToString();
}
fikri ifade ağacı ayrıştırmak ve dize değişkeni çıkışı içine düğümler ilgili ayrıntıları yazmak. Ancak, bu değişken sayfaya yazıldığında (Output()
yöntemini kullanarak), boş olduğunu buluyorum. Kod boyunca adım hata ayıklayıcı kullandığınızda
, I çıkışı doğru kod ilk kez HandleParameterExpression()
yürütüldüğünde x 'olarak ayarlanır, ancak bulmak en kısa sürede HandleParameterExpression()
geri anahtar bloğunda kontrol döner HandleExpression()
, değişken tekrar gizemli bir şekilde boş.
Dizgiler başvuru türleri olduğundan, yöntemleri referanslar arasında geçiş yapabilmem ve yöntemler tarafından yapılan değere yapılan değişiklikler korunmalıdır, doğru mu? Farkında olmadığım C# 'da geçen bazı parametre parametreleri var mı?
Kolay kaplanlar! Beş dakikada dört cevap! Herkese büyük teşekkür! – David
Neden değiştirilen çıktıyı geri vermiyorsunuz? Bir şey mi eksik? –
@Omar: çünkü ihtiyacım yok. Parametrelerin değiştirilmesinin yanı sıra bir şeylerin döndürülmesi için de yöntemler kullanmak mümkündür. – David