После некоторого рытья, и я закончил настройку Thread
CurrentCulture , чтобы иметь CultureInfo («en-US») в методе действия контроллера:
Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-US");
Вот некоторые другие опции , если вы хотите иметь эту настройку для каждого представления.
О значении свойства CurrentCulture
:
Объект CultureInfo , который возвращается этим свойством вместе со связанными с ним объектами, определяет формат по умолчанию для дат, времени, чисел, значений валюты, порядка сортировки текста, условных обозначений обсадной колонны, и сравнение строк.
Источник: MSDN CurrentCulture
Примечание: Предыдущее свойство свойства
CurrentCulture
вероятно, необязательно, если контроллер уже работает сCultureInfo("en-US")
или аналогичным, если формат даты"MM/dd/yyyy"
.После установки свойства
CurrentCulture
добавьте блок кода, чтобы преобразовать дату в формат"M/d/yyyy"
в представлении:@{ //code block var shortDateLocalFormat = ""; if (Model.AuditDate.HasValue) { shortDateLocalFormat = ((DateTime)Model.AuditDate).ToString("M/d/yyyy"); //alternative way below //shortDateLocalFormat = ((DateTime)Model.AuditDate).ToString("d"); } } @shortDateLocalFormat
Над переменной
@shortDateLocalFormat
форматируется работаToString("M/d/yyyy")
. Если используетсяToString("MM/dd/yyyy")
, как и в первый раз, вы попадаете в с нулевой ошибкой . Также, как рекомендовано , работает ТоммиToString("d")
. Фактически"d"
означает «Короткая диаграмма даты» и может использоваться с различными форматами культуры / языка.Я думаю, что блок кода сверху также может быть заменен каким-либо методом хелпера хелпера или аналогичным.
Например
@helper DateFormatter(object date) { var shortDateLocalFormat = ""; if (date != null) { shortDateLocalFormat = ((DateTime)date).ToString("M/d/yyyy"); } @shortDateLocalFormat }
можно использовать с этим вспомогательным вызовом
@DateFormatter(Model.AuditDate)
Update, я узнал, что есть альтернативный способ сделать то же самое, когда метод DateTime.ToString (String, IFormatProvider) используется. Когда этот метод используется, нет необходимости использовать свойство
Thread
CurrentCulture
.CultureInfo("en-US")
передается как второй аргумент -> Метод IFormatProvider -DateTime.ToString(String, IFormatProvider)
.Модифицированный вспомогательный метод:
@helper DateFormatter(object date) { var shortDateLocalFormat = ""; if (date != null) { shortDateLocalFormat = ((DateTime)date).ToString("d", new System.Globalization.CultureInfo("en-US")); } @shortDateLocalFormat }
Используйте HashSet вместо Списка при работе с наборами. Затем можно просто использовать IsSubsetOf ()
HashSet<double> t1 = new HashSet<double>{1,3,5};
HashSet<double> t2 = new HashSet<double>{1,5};
bool isSubset = t2.IsSubsetOf(t1);
Извините, что он не использует LINQ. :-(
, Если необходимо использовать списки, затем работы решения @Jared с протестом, что необходимо будет удалить любые повторные элементы, которые существуют.
Попробуйте это
static bool IsSubSet<A>(A[] set, A[] toCheck) {
return set.Length == (toCheck.Intersect(set)).Count();
}
, идея здесь, это Пересекается, только возвратит значения, которые находятся в обоих Массивах. В этой точке, если длина получающегося набора совпадает с исходным набором, то все элементы в "наборе" находятся также в "проверке" и поэтому "набор" является подмножеством Примечания "toCheck"
: Мое решение не работает, если "установленный" имеет дубликаты. Я не изменяю его, потому что я не хочу красть голоса других людей.
Подсказка: Я голосовал за ответ Cameron.