Как я могу сделать чистую установку? [Дубликат]

В случае 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, специальный случай).

0
задан Community 13 April 2017 в 12:25
поделиться

2 ответа

Поместите диск внушения в свой компьютер, можно получить изображение от http/www.ubuntu.com/download, когда установка выбора загрузок диска, избранный диск стирания и установят Ubuntu, и Вы будете вестись хотя остальные

0
ответ дан Sean 22 October 2019 в 15:07
поделиться

В дополнение к вышеупомянутому я добавил бы, что, если Вы находитесь в системе двойной загрузки с Windows, проверьте, что Вы не используете wubi установку и что Вы загружаетесь от диска и не выполняете его из Windows.

0
ответ дан barrydrake 22 October 2019 в 15:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: