Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
 Аватар для HIMen
4340 / 1509 / 101
Регистрация: 12.04.2009
Сообщений: 2,342

Не работает расширяющий метод

30.01.2011, 00:18. Показов 2174. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Создал метод с сигнатурой
C#
1
MvcHtmlString ActionLink(this HtmlHelper , string , string , string , object )
Он работает и доступен для вызова
Существуют также еще такие перегрузки
C#
1
2
3
4
5
6
7
8
9
10
MvcHtmlString ActionLink(this HtmlHelper htmlHelper, string linkText, string actionName);       
MvcHtmlString ActionLink(this HtmlHelper , string , string , object );      
MvcHtmlString ActionLink(this HtmlHelper , string , string , RouteValueDictionary );     
MvcHtmlString ActionLink(this HtmlHelper , string , string , string );      
MvcHtmlString ActionLink(this HtmlHelper , string , string , object , object );       
MvcHtmlString ActionLink(this HtmlHelper , string , string , RouteValueDictionary , IDictionary<string, object> );       
MvcHtmlString ActionLink(this HtmlHelper , string , string , string , object , object );       
MvcHtmlString ActionLink(this HtmlHelper , string , string , string , RouteValueDictionary , IDictionary<string, object> );       
MvcHtmlString ActionLink(this HtmlHelper , string , string , string , string , string , string , object , object );        
MvcHtmlString ActionLink(this HtmlHelper htmlHelper, string , string , string , string , string , string , RouteValueDictionary , IDictionary<string, object> );
Вызываю
C#
1
@Html.ActionLink("Удалить теекущее изображение", "DeleteImage", "File", new { id = Model.Image.ID })
И почему-то выбирается 5-ый метод с перегрузкой (this HtmlHelper , string , string , object , object ), хотя мой более конкретный. С чем это может быть связано?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
30.01.2011, 00:18
Ответы с готовыми решениями:

Как сделать расширяющий метод для статического или абстрактного класса?
Как сделать расширяющий метод для статического или абстрактного класса? public static int MyFunc(this ...) { return ... } Что...

Расширяющий метод
Метод расширение для stringa, который при вызове добавляет пробел к концу строки. Как передать именно ссылку экземпляра на котором...

Расширяющий метод
Разбираюсь с расширяющими методами, например у троелсена есть код, у него же сказано что перед первым параметром передаваемым в метод...

8
Почетный модератор
Эксперт .NET
 Аватар для NickoTin
8728 / 3680 / 404
Регистрация: 14.06.2010
Сообщений: 4,513
Записей в блоге: 9
30.01.2011, 00:45
Странно, но по моему логика вполне видна:
Т.к. 6 перегрузка в 3 параметре принимает RouteValueDictionary коим string выйти никак не может, то выбирается 5я перегрузка т.к. упаковать string в object можно без проблем + 4 параметр х.з. что значит и к IDictionary<string, object> никак не относится, т.е. является object'ом.
0
 Аватар для HIMen
4340 / 1509 / 101
Регистрация: 12.04.2009
Сообщений: 2,342
30.01.2011, 00:48  [ТС]
4ый параметр - анонимный класс - идет как object
Моя перегрузка идеально подходит, но почему-то компилятор выбирает 5ую и приводит string к object
0
Почетный модератор
Эксперт .NET
 Аватар для NickoTin
8728 / 3680 / 404
Регистрация: 14.06.2010
Сообщений: 4,513
Записей в блоге: 9
30.01.2011, 00:49
HIMen, как string может быть приведен к RouteValueDictionary?
0
 Аватар для HIMen
4340 / 1509 / 101
Регистрация: 12.04.2009
Сообщений: 2,342
30.01.2011, 00:50  [ТС]
SSTREGG, всмысле как? Когда я говорю пятый метод, я считаю с единицы))
0
Почетный модератор
Эксперт .NET
 Аватар для NickoTin
8728 / 3680 / 404
Регистрация: 14.06.2010
Сообщений: 4,513
Записей в блоге: 9
30.01.2011, 01:00
HIMen, ты меня заставил каждую строчку отдельно посчитать

Метод который ты вызываешь использует 4 параметра, следовательно подходят только 2 перегрузки:
C#
1
2
MvcHtmlString ActionLink(this HtmlHelper , string , string , object , object );       
MvcHtmlString ActionLink(this HtmlHelper , string , string , RouteValueDictionary , IDictionary<string, object> );
Каким макаром во 2й перегрузке из этого списка можно string неявно привести к RouteValueDictionary? )

Или я чего-то не догоняю? )

Добавлено через 4 минуты
Всё, понял - не догонял, надо идти спать

Я считаю что это из-за неявного приведения типов.
0
 Аватар для HIMen
4340 / 1509 / 101
Регистрация: 12.04.2009
Сообщений: 2,342
30.01.2011, 03:09  [ТС]
SSTREGG, на те что содержат RouteValueDictionary вообще не смотри
я передаю string , string , string , object.
Мой расширяющий метод доступен для вызова и полностью подходит, но компилятор выбирает string , string , object , object

Добавлено через 16 минут
Хм, решение нашел, поместил свой метод в пространство остальных - System.Web.Mvc.Html (был в глобале) стало работать как должно

Добавлено через 1 час 50 минут
хех, похоже на баг
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
namespace ns1
{
    using ns2;
    class Program
    {
        static void Main()
        {
            123.Ext("string");
        }
    }
    static class EX1
    {
        public static void Ext(this int i, object o)
        {
            System.Console.WriteLine("1");
        }
    }
}
namespace ns2
{
    static class EX2
    {
        public static void Ext(this int i, string r)
        {
            System.Console.WriteLine("2");
        }
    }
}
C#
1
output: 1
1
Почетный модератор
Эксперт .NET
 Аватар для NickoTin
8728 / 3680 / 404
Регистрация: 14.06.2010
Сообщений: 4,513
Записей в блоге: 9
30.01.2011, 03:30
HIMen, это не баг, это фича Что первое попало, то и юзаем. Так попробуй:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
using System;
using System.Collections.Generic;
using System.Text;
 
namespace ObjExts
{
    using ns2;
    class Program
    {
        static void Main( string[] args ) {
            int i = 0;
            i.Ext("LOL");
            Console.ReadLine();
        }
    }
 
    static class EX2
    {
        public static void Ext( this int i, string r ) {
            System.Console.WriteLine("2");
        }
    }
}
 
namespace ns2
{
    static class EX1
    {
        public static void Ext( this int i, object o ) {
            System.Console.WriteLine("1");
        }
    }
}
Code
1
out: 2
0
 Аватар для HIMen
4340 / 1509 / 101
Регистрация: 12.04.2009
Сообщений: 2,342
30.01.2011, 03:44  [ТС]
Ну просто, мне кажется, что из всех перегрузок он должен выбрать наиболее подходящую (по аналогии с методами). А он берет первую подходящую
Но если расширяющие методы в одном пространстве, то все работает как должно
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
30.01.2011, 03:44
Помогаю со студенческими работами здесь

Расширяющий метод Contains
Метод сontains ,не подскажите что он делает,желательно с примером linq .На msdn не сильно понятно написано.

Расширяющий метод
Добрый день.Хотел написать что-то в духе prop.NonEither(x =&gt; x != null, () =&gt; { ... ; }, () =&gt; { ...; }); Не пойму ,как...

Расширяющий метод
Здравствуйте. Дана библиотека фигур. Помогите пожалуйста написать расширяющий метод, который печатает тип фигуры. public abstract...

Компилятор не видит расширяющий метод
Сделал расширяющий метод ForbiddenSymbols() для класса string но среда просто его не видит. VS2012, .NET 4.5 Подскажите может оформил...

Расширяющий метод: исправить код
В файлах - страница из книги и результат работы программы. Мой код: using System; class MainEntryPoint { static void...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&amp;d=1772460536 Одним из. . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru