2015-03-26 2 views
0

Есть ли способ во время компиляции утверждать аргумент Func является статическим?C# Assert at compile time Аргумент Func является статическим

Это похоже на то, что компилятор может легко проверить, а не полагаться на отказ во время выполнения.

Я понимаю, что это может быть сделано во время выполнения с [аргумент] .Method.IsStatic

Приветствиях

ответ

1

Это похоже на то, что компилятор может легко проверить, а не полагаться на провал выполнения.

Да, это абсолютно возможно - но только если есть что-то на этом языке, чтобы побудить его сделать это. В C# нет, это довольно странное требование, IMO, и тот, который не играет хорошо с лямбда-выражениями.

С VS 2015 вы можете легко написать Roslyn CodeDiagnostic, чтобы обнаружить это и вызвать предупреждение или ошибку. Вероятно, вы захотите украсить параметр атрибутом для обнаружения, а затем проверить все вызывающие.

+0

Функция аргумента обрабатывает транзакцию с базой данных, которая может выйти из строя, если другой процесс одновременно пытается манипулировать данными. Я пишу обертку, чтобы она несколько раз пыталась выполнить попытку. Я бы хотел, чтобы функция аргумента не имела внешнего эффекта, если она терпит неудачу. – Hector

+0

@ user2036256: Ну, требуя, чтобы это был статический метод, не является ни достаточным, ни необходимым для этого случая ... –

+0

Я знаю. Но это шаг в правильном направлении. Его больше как дружеское напоминание. В идеальном мире классы, призывающие к этому, также были бы статичными, но нам нужно наследование. Это, по крайней мере, обеспечит применение методов в классе. – Hector

Смежные вопросы