Нет. В C # вы не можете указать какие-либо модификаторы (например, 'out' или ref
), кроме this
для первого параметра метода расширения - вы можете сделать это для других. Не знаком с синтаксисом VB, но, похоже, он использует декларативный подход для маркировки метода расширения.
Когда вы вызываете его, вы не указываете первый this
параметр. Следовательно, помечать параметр как out или ref не имеет смысла, так как вы не можете указать модификатор при вызове, как если бы вы делали это для обычных методов
void MyInstanceMethod(ref SomeClass c, int data) { ... } // definition
obj.MyInstanceMethod(ref someClassObj, 10); // call
void MyExtensionMethod(this SomeClass c, int data) {.... } // defn
c.MyExtensionMethod(10); // call
Я думаю, что проблема, с которой вы здесь сталкиваетесь, связана с неизменностью типов значений. Если бы Будни были ссылочным типом, все бы хорошо. Для неизменяемых типов (структур) способ де-факто - возвращать новый экземпляр с требуемым значением. Например. См. Метод Add в структуре DateTime, он возвращает новый экземпляр DateTime, значение которого = значение экземпляра DateTime получателя + значение параметра.
public DateTime Add( TimeSpan value )