В случае Array
.Length есть краевой регистр. Хотя «Длина» отображается как свойство, вы не можете использовать ее ни в одном из предложенных ранее решений.
using Contract = System.Diagnostics.Contracts.Contract;
using Exprs = System.Linq.Expressions;
static string PropertyNameFromMemberExpr(Exprs.MemberExpression expr)
{
return expr.Member.Name;
}
static string PropertyNameFromUnaryExpr(Exprs.UnaryExpression expr)
{
if (expr.NodeType == Exprs.ExpressionType.ArrayLength)
return "Length";
var mem_expr = expr.Operand as Exprs.MemberExpression;
return PropertyNameFromMemberExpr(mem_expr);
}
static string PropertyNameFromLambdaExpr(Exprs.LambdaExpression expr)
{
if (expr.Body is Exprs.MemberExpression) return PropertyNameFromMemberExpr(expr.Body as Exprs.MemberExpression);
else if (expr.Body is Exprs.UnaryExpression) return PropertyNameFromUnaryExpr(expr.Body as Exprs.UnaryExpression);
throw new NotSupportedException();
}
public static string PropertyNameFromExpr<TProp>(Exprs.Expression<Func<TProp>> expr)
{
Contract.Requires<ArgumentNullException>(expr != null);
Contract.Requires<ArgumentException>(expr.Body is Exprs.MemberExpression || expr.Body is Exprs.UnaryExpression);
return PropertyNameFromLambdaExpr(expr);
}
public static string PropertyNameFromExpr<T, TProp>(Exprs.Expression<Func<T, TProp>> expr)
{
Contract.Requires<ArgumentNullException>(expr != null);
Contract.Requires<ArgumentException>(expr.Body is Exprs.MemberExpression || expr.Body is Exprs.UnaryExpression);
return PropertyNameFromLambdaExpr(expr);
}
Теперь пример использования:
int[] someArray = new int[1];
Console.WriteLine(PropertyNameFromExpr( () => someArray.Length ));
Если PropertyNameFromUnaryExpr
не проверял наличие ArrayLength
, «someArray» будет печататься на консоль (компилятор, похоже, создает прямой доступ к полю Length для поддержки , как оптимизацию, даже в Debug, специальный случай).
Поместите диск внушения в свой компьютер, можно получить изображение от http/www.ubuntu.com/download, когда установка выбора загрузок диска, избранный диск стирания и установят Ubuntu, и Вы будете вестись хотя остальные
В дополнение к вышеупомянутому я добавил бы, что, если Вы находитесь в системе двойной загрузки с Windows, проверьте, что Вы не используете wubi установку и что Вы загружаетесь от диска и не выполняете его из Windows.