|
C# Расширяющий метод не изменяет значение вызывающей переменной.
|
|||
---|---|---|---|
#18+
Здравствуйте, уважаемые форумчане. Подскажите, как сделать так чтобы расширяющий метод изменял значение вызывающей переменной? Пример: расширяющий метод: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
Я хочу чтобы после Код: c# 1. 2.
в переменной s было бы "abc". Вобщем, как сделать this System.String str ссылочной переменной? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.12.2013, 13:02 |
|
C# Расширяющий метод не изменяет значение вызывающей переменной.
|
|||
---|---|---|---|
#18+
Тип string сам по себе ссылочный, поскольку является объектом. В данном случае имеет место быть передача ссылки по значению , и это не изменить никак, поскольку первый параметр extension-метода, передающий ссылку на экземпляр расширяемого класса, не может быть ref или out - это ссылка на вызывающий объект, и она не может быть изменена. Это во-первых. Во-вторых, тип string - immutable, и методы, изменяющие строки, всегда возвращают новый экземпляр типа. В-третьих, использовать конкатенацию строк для аккумулирования - убийство производительности и памяти. В данном случае нужно использовать StringBuilder. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.12.2013, 13:16 |
|
C# Расширяющий метод не изменяет значение вызывающей переменной.
|
|||
---|---|---|---|
#18+
Andrey_VP, По коду и требованию - узнаю федерала............... ... |
|||
:
Нравится:
Не нравится:
|
|||
27.12.2013, 13:30 |
|
C# Расширяющий метод не изменяет значение вызывающей переменной.
|
|||
---|---|---|---|
#18+
Спасибо за совет! "Где-то в степи", нет, я не такой. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.12.2013, 14:15 |
|
C# Расширяющий метод не изменяет значение вызывающей переменной.
|
|||
---|---|---|---|
#18+
Andrey_VP, если перефразировать ваш топик на политический контент то получится - Если они попытаются расширить список Магнитского - Мы отключим горячую воду в Костроме ... |
|||
:
Нравится:
Не нравится:
|
|||
27.12.2013, 14:19 |
|
C# Расширяющий метод не изменяет значение вызывающей переменной.
|
|||
---|---|---|---|
#18+
Сон Веры ПавловныВ-третьих, использовать конкатенацию строк для аккумулирования - убийство производительности и памяти Не совсем корректное утверждение. Для небольшого количества конкатенаций с небольшими по размеру строками скорость простого сложения будет выше, чем генерация класса StringBuilder с последующими затратами на вызов методов Append и иже... Что касается памяти, то GC - рулит :-) С мелкими объектами на раз расправляется... ... |
|||
:
Нравится:
Не нравится:
|
|||
27.12.2013, 14:19 |
|
C# Расширяющий метод не изменяет значение вызывающей переменной.
|
|||
---|---|---|---|
#18+
Arm79Для небольшого количества конкатенаций с небольшими по размеру строками скорость простого сложения будет выше, чем генерация класса StringBuilder с последующими затратами на вызов методов Append и иже... Я в курсе, и сам не буду использовать StringBuilder для получения "ab" из "a" и "b". Но вот что-то мне подсказывает, что относительно этой операции у ТС далеко и широко идущие планы. P.S. "Небольшие" - очень относительное понятие. Недавно удивился увеличению быстродействия в своей самописной скриптовалке на основе SMO, когда заменил получение результата от StringCollection через LINQ-агрегацию (в свое время лень было сделать по-человечески) на все тот же StringBuilder. Это стало заметно даже на относительно небольших объектах - скажем, на DDL таблицы, в которой полей 20. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.12.2013, 14:47 |
|
C# Расширяющий метод не изменяет значение вызывающей переменной.
|
|||
---|---|---|---|
#18+
Сон Веры Павловны, я тож когда-то делал скриптовалку на SMO, думал один такой ненормальный :-) Скрипты к единому шаблону приводил. С добавлением везде шапки комментариев и т.д. и т.п. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.12.2013, 14:55 |
|
C# Расширяющий метод не изменяет значение вызывающей переменной.
|
|||
---|---|---|---|
#18+
Arm79Скрипты к единому шаблону приводил. С добавлением везде шапки комментариев и т.д. и т.п. У нас всё хуже. В рабочей базе под сотню тысяч ХП - результат кодогенерации некоей системы. После тыка в ноду Stored Procedures в Object Explorer'е SSMS можно успеть пообедать к тому моменту, как она раскроется (как я сильно подозреваю, SSMS содержимое этой ноды тянет тоже посредством SMO). А найти в ней что-то свое нереально. Вот и пришлось написать своё. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.12.2013, 15:05 |
|
|
start [/forum/topic.php?fid=20&msg=38514149&tid=1403460]: |
0ms |
get settings: |
7ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
51ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
49ms |
get tp. blocked users: |
1ms |
others: | 13ms |
total: | 150ms |
0 / 0 |