У меня есть календарь и текстовое поле, которое содержит время суток. Я хочу создать дату и время, которая является комбинацией двух. Я знаю, что могу сделать это путем рассмотрения часов и минут и затем добавления их к календарю DateTime, но это кажется довольно грязным.
Существует ли лучший путь?
У меня недостаточно контекста, чтобы дать правильный ответ, но я предложу вам максимально сделать код неизменным . Используйте поля public final
. Больше не получает
или setters
: каждое поле должно быть определено конструктором
. Ваш код короче, удобочитаем и не позволяет писать код с побочными эффектами.
Это не мешает передавать пустые аргументы конструктору, хотя... Вы по-прежнему можете проверить каждый аргумент в соответствии с предложением @ cletus, но я предложу вам бросить IllegalArgumentException
вместо StartPointerException
, который не дает нового намека на то, что вы сделали.
В любом случае, это то, что я делаю как можно больше, и это значительно улучшило мой код (читаемость, стабильность). Все в моей команде так и делают, и мы этим очень довольны. Мы узнали, что когда мы пытаемся написать какой-то erlang
код, где все незыблемо.
Надеюсь, это поможет.
-121--148â2-Для меня понятие является тем же или, по крайней мере, предназначено быть тем же самым, , но фактическое использование не является .
Когда мы говорим о указателях или ссылке, мы говорим о концепции. Эта переменная «указывает на» или ее «ссылка» на что-то другое, что-то, что хранится где-то еще.
Если я использую эту ссылку, например, обновляя значение, я фактически обновляю объект ссылки, объект, на который указывает переменная. Если на объект ссылаются из двух разных мест, я фактически обновлю одно и то же из обоих мест.
Таким образом, концепция может быть связана с вашим адресом в реальном мире, это просто способ ссылаться на другую вещь, и эта ссылка может быть разделена, как многие люди, имеющие мой адрес.
Разница больше в том, как он был использован и что разрешено языком. Следует отметить, что детали реализации ссылки или указателя не являются неявными в самой концепции. В C #, которое продолжает быть истинным.
Ссылка является ссылкой, и, следовательно, просто не имеет смысла суммировать две ссылки или добавлять одну к ссылке... что это вообще значит? Я не могу добавить два домашних адреса (как Бейкер-стрит + Домашняя улица)...
В C++ детализация реализации ссылки фактически является ссылкой. Таким образом, указатель является не просто указателем, его также (и используется в качестве) адреса памяти. Таким образом, например, можно добавить к указателям, потому что на самом деле имеет смысл добавить два адреса памяти, чтобы получить другой, или добавить 4 к адресу памяти. Таким образом, на языке C++ указатель перестал быть понятием и стал именем, данным фактической детали реализации .
Поэтому в C # указатели и ссылки различны. Потому что через семантически смысл довольно похож, они хотели отличить от старого понятия C и C++,где указатель стал таким же, как адрес памяти.
Я рекомендую вам прочитать статью « Ссылки не адреса » от Эрик Липперт , где я считаю, что он делает большую работу, объясняя различия.
-121--3823413-Для добавления времени к дате можно использовать метод DateTime.Add ().
DateTime date = DateTime.Now;
TimeSpan time = new TimeSpan(36, 0, 0, 0);
DateTime combined = date.Add(time);
Console.WriteLine("{0:dddd}", combined);
Можно также создать временной интервал путем анализа последовательности , если это необходимо.
Кроме того, можно просмотреть другие элементы управления. Вы не упомянули, если вы используете winforms, wpf или asp.net, но есть различные элементы управления выбора даты и времени, которые поддерживают выбор даты и времени.
Для добавления времени к дате можно использовать метод DateTime.Add ().
DateTime date = DateTime.Now;
TimeSpan time = new TimeSpan(36, 0, 0, 0);
DateTime combined = date.Add(time);
Console.WriteLine("{0:dddd}", combined);
Можно также создать временной интервал путем анализа последовательности , если это необходимо.
В качестве альтернативы можно воспользоваться другими средствами управления. Вы не упомянули, если вы используете winforms, wpf или asp.net, но есть различные элементы управления выбора даты и времени, которые поддерживают выбор даты и времени.
-121--998316- Наши крупные проекты разработки # включают файлы
cc из файла cc для классов с сотнями методов. Я не согласился с этим, но были причины.
Объедините оба. Средство выбора даты и времени также поддерживает время комплектования.
Необходимо просто изменить свойство Format-Property и, возможно, свойство CustomFormat-Property.
В зависимости от того, как вы форматируете (и проверяете!) Дата, введенная в текстовом поле, вы можете сделать это:
TimeSpan time;
if (TimeSpan.TryParse(textboxTime.Text, out time))
{
// calendarDate is the DateTime value of the calendar control
calendarDate = calendarDate.Add(time);
}
else
{
// notify user about wrong date format
}
Обратите внимание, что Timespan.triparse ожидает, что строка быть в формате HH: MM '(необязательные секунды).
Using https://github.com/FluentDateTime/FluentDateTime
DateTime dateTime = DateTime.Now;
DateTime combined = dateTime + 36.Hours();
Console.WriteLine(combined);