Эквивалентный из функции WeekDay VB6 в C#

Краткий ответ: удалить время жизни 'a для параметра self параметра split_first: fn split_first(&self) -> &'a str ( детская площадка ).

Длинный ответ:

Когда вы пишете этот код:

struct Foo<'a> {
    part: &'a str,
}

impl<'a> Foo<'a> {
    fn new(s: &'a str) -> Self {
        Foo { part: s }
    }
}

Вы говорите компилятору, что все Foo экземпляры связаны с некоторым временем жизни [ 118], которое должно быть равно или короче времени жизни строки, передаваемой в качестве параметра в Foo::new. Это время жизни 'a может отличаться от времени жизни каждого экземпляра Foo. Затем вы пишете:

let words = "Sometimes think, the greatest sorrow than older";
Foo::new(words)

Компилятор делает вывод, что время жизни 'a должно быть равно или короче времени жизни words. Запретив любые другие ограничения, компилятор будет использовать время жизни words, которое равно 'static, поэтому оно действует в течение всего срока службы программы.

Когда вы добавляете определение split_first:

fn split_first(&'a self) -> &'a str

Вы добавляете дополнительное ограничение: вы говорите, что 'a также должно быть равно или короче времени жизни self , Поэтому компилятор будет принимать меньшее время жизни words и время жизни временного экземпляра Foo, то есть время жизни временного экземпляра. @ Ответ AndersKaseorg объясняет, почему это не работает.

Удаляя время жизни 'a для параметра self, я декоррелирую 'a из времени жизни временного, поэтому компилятор может снова сделать вывод, что 'a - это время жизни words, которое достаточно долго для работы программы.

6
задан Daniel 11 October 2016 в 18:36
поделиться

4 ответа

public static int Weekday(DateTime dt, DayOfWeek startOfWeek)
{
    return (dt.DayOfWeek - startOfWeek + 7) % 7;
}

С помощью это можно назвать:

DateTime dt = DateTime.Now;
Console.WriteLine(Weekday(dt, DayOfWeek.Friday));

Вышеупомянутые выводы:

4

поскольку вторник спустя 4 дня после пятницы.

12
ответ дан 8 December 2019 в 13:03
поделиться

Вы имеете в виду DateTime. Свойство DayOfWeek?

DayOfWeek dow = DateTime.Now.DayOfWeek;
3
ответ дан 8 December 2019 в 13:03
поделиться

Я не думаю, что существует эквивалент двух форм аргумента Будней функции VB.

Вы могли эмулировать его с помощью чего-то вроде этого;

private static int Weekday(DateTime date, DayOfWeek startDay)
{
    int diff;
    DayOfWeek dow = date.DayOfWeek;
    diff = dow - startDay;
    if (diff < 0)
    {
        diff += 7;
    }
    return diff;
}

Затем называя его как так:

int i = Weekday(DateTime.Now, DayOfWeek.Friday);

Это возвращается 4 на сегодняшний день, как вторник спустя 4 дня после пятницы.

1
ответ дан 8 December 2019 в 13:03
поделиться

Да, Каждое значение DateTime имеет созданный в свойстве под названием DayOfWeek, который возвращает перечисление того же имени...

DayOfWeek dow = DateTime.Now.DayOfWeek;

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

int dow = (int)(DateTime.Now.DayOfWeek);

Необходимо будет добавить константу от 1 до 6 и сделать Модификацию 7 для перестройки ее к другому дню помимо воскресенья, однако...

2
ответ дан 8 December 2019 в 13:03
поделиться
Другие вопросы по тегам:

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