C#: неявный оператор и дополнительные методы

Добавьте его в app \ Http \ Controller \ Auth \ VerificationController.php

protected function getDateFormat()
{
    return 'Y-m-d H:i:s';
}
12
задан Matthew Murdoch 2 July 2011 в 06:34
поделиться

3 ответа

Это не характерно для дополнительных методов. C# неявно не бросит объект к другому типу, если не будет подсказка о целевом типе. Примите следующее:

class A {
    public static implicit operator B(A obj) { ... }
    public static implicit operator C(A obj) { ... }
}

class B {
    public void Foo() { ... }
}

class C {
    public void Foo() { ... }
}

Каким методом Вы ожидали бы позвониться в следующем утверждении?

new A().Foo(); // B.Foo? C.Foo? 
12
ответ дан 2 December 2019 в 21:04
поделиться

Нет, Вы не имеете, но вычет типа компилятора C# не достаточно мощен для понимания кода, и, в частности, он не смотрит на неявные операторы. Необходимо будет придерживаться с Expression<Func<T,bool>> — почему бы не дополнительные методы как Or, And непосредственно по выражениям?

2
ответ дан 2 December 2019 в 21:04
поделиться

Как Anton говорит, если Вы помещаете дополнительные методы непосредственно на Expression<Func<...>> это, вероятно, работало бы.

Больше объяснения... ничто особенно умное, но идея не было бы то, что у Вас нет a PredicateBuilder класс, из которого Вы создаете экземпляры. Вместо этого у Вас просто есть чисто статические стандартные блоки:

public static class Predicates
{
    public static Expression<Func<T, bool>> True<T>()
    {
        return x => true;
    }

    public static Expression<Func<T, bool>> False<T>()
    {
        return x => false;
    }

    public static Expression<Func<T, bool>> And<T>(
        this Expression<Func<T, bool>> left,
        Expression<Func<T, bool>> right)
    {
        return ... // returns equivalent of (left && right)
    }
}

Те две функции True и False играйте роль Вашего PredicateBuilder(bool) конструктор, и у Вас, по-видимому, были бы подобные для примитивных сравнений и так далее и затем операторы как And позволил бы Вам включить два выражения вместе.

Однако затем Вы теряете способность использовать символы оператора, которые Вы, возможно, использовали со своим интерфейсным объектом, и вместо этого необходимо использовать имена методов. Я играл вокруг с тем же видом подходов, и вещь, к которой я всегда возвращаюсь, состоит в том, что я хочу смочь определить дополнительные операторы. Команда C#, по-видимому, рассмотрела их для 3,0 (наряду с дополнительными свойствами), но они были более низким приоритетом, потому что они не играли роль в полных целях Linq.

0
ответ дан 2 December 2019 в 21:04
поделиться
Другие вопросы по тегам:

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