Несоответствие «sort» и «sort -k» [duplicate]

TL; DR: Попробуйте использовать Html.Partial вместо Renderpage


Я получал Object reference not set to an instance of an object, когда пытался сделать вид в представлении, отправив ему модель, например это:

@{
    MyEntity M = new MyEntity();
}
@RenderPage("_MyOtherView.cshtml", M); // error in _MyOtherView, the Model was Null

Отладка показала, что модель была Null внутри MyOtherView. Пока я не сменил его на:

@{
    MyEntity M = new MyEntity();
}
@Html.Partial("_MyOtherView.cshtml", M);

И это сработало.

Кроме того, причина, по которой я не имел Html.Partial для начала, заключалась в том, что Visual Studio иногда выдает ошибки, (f9), если он находится внутри другого построенного цикла foreach, хотя это не ошибка:

@inherits System.Web.Mvc.WebViewPage
@{
    ViewBag.Title = "Entity Index";
    List<MyEntity> MyEntities = new List<MyEntity>();
    MyEntities.Add(new MyEntity());
    MyEntities.Add(new MyEntity());
    MyEntities.Add(new MyEntity());
}
<div>
    @{
        foreach(var M in MyEntities)
        {
            // Squiggly lines below. Hovering says: cannot convert method group 'partial' to non-delegate type Object, did you intend to envoke the Method?
            @Html.Partial("MyOtherView.cshtml");
        }
    }
</div>

Но я смог запустить приложение без проблем с этим " ошибка". Я смог избавиться от ошибки, изменив структуру цикла foreach, чтобы выглядеть так:

@foreach(var M in MyEntities){
    ...
}

Хотя я чувствую, что это потому, что Visual Studio неправильно интерпретировала амперсанды и скобки .

11
задан Jon Ericson 16 September 2008 в 01:07
поделиться

4 ответа

man-страница в OS X говорит:

******* ПРЕДУПРЕЖДЕНИЕ ******* Язык, указанный средой влияет на порядок сортировки. Установите LC_ALL = C, чтобы получить традиционный порядок сортировки, который использует значения собственного байта.

, которые могли бы объяснить вещи.

Если некоторые из ваших систем не поддерживают локаль, они будет по умолчанию для этого языка (C), поэтому вам не придется устанавливать его на них. Если у вас есть некоторые, которые поддерживают локальные сети и хотят одинакового поведения, установите LC_ALL=C в этих системах. Это будет способ иметь такое же количество систем, как я знаю, так же.

Если у вас нет никаких локальных систем, просто убедитесь, что они разделяют локаль, вероятно, будет достаточно.

Подробнее о канонической информации см. Спецификацию Single UNIX ®, описание версии 2 locale , переменных среды , setlocale () и описание утилиты sort (1) .

20
ответ дан Henrik Gustafsson 1 September 2018 в 07:28
поделиться
  • 1
    Как установить языковой стандарт на LC_ALL = C? – Malcolm 7 February 2012 в 19:23
  • 2
    @Malcolm: многие рекомендации подскажут вам экспортировать переменную LC_ALL ... но это clobbers настройки оболочки пользователя. См. Мой ответ здесь , чтобы установить его для заданной области – mateor 26 June 2013 в 06:22

Вероятно, это связано с различными настройками переменных среды локали . sort будет использовать эти настройки, чтобы определить, как сравнивать строки. Установив эти переменные среды так, как вы хотите, прежде чем называть sort, вы должны заставить заставить себя вести себя определенным образом.

3
ответ дан Greg Hewgill 1 September 2018 в 07:28
поделиться

Для более подробной информации о sort, прочтите спецификацию sort в спецификации Single Unix v3 . Он указывает

. Сравнение [...] должно выполняться с использованием последовательности сортировки текущей локали.

IOW, как sort сортировки зависят на языковых настройках среды, в которой работает скрипт.

2
ответ дан Jörg W Mittag 1 September 2018 в 07:28
поделиться

Это может быть результатом различий локали:

$ echo 'CO2_
CO_' | env LC_ALL=C sort
CO2_
CO_


$ echo 'CO2_
CO_' | env LC_ALL=en_US sort
CO_
CO2_

Установка переменной окружения LC_ALL с тем же значением должна устранить проблему.

3
ответ дан Jon Ericson 1 September 2018 в 07:28
поделиться
Другие вопросы по тегам:

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