Metоды понимают свои заголовки?
От: nt2000  
Дата: 28.11.19 02:55
Оценка:
static System.Collections.Generic.SortedDictionary<int,string> Mymetod(System.Collections.Generic.SortedDictionary<string, int> dic1, int mn, int mx)
{
    var dic2 = new System.Collections.Generic.SortedDictionary<int, string> { };
        ...

Почену мне дис2 приходится переобъявлять? (вотличии от дис1)
Re: Metоды понимают свои заголовки?
От: Ромашка Украина  
Дата: 28.11.19 03:06
Оценка:
Здравствуйте, nt2000, Вы писали:
N>Почену мне дис2 приходится переобъявлять? (вотличии от дис1)

Потому что вернуть можно совсем не то, что написано в заголовке. Например, можно вернуть null. Или какого-нибудь наследника от написанного в заголовке. Блин, да в заголовке вообще интерфейс может быть написан...


Всё, что нас не убивает, ещё горько об этом пожалеет.
Re: Metоды понимают свои заголовки?
От: Sinclair Россия https://github.com/evilguest/
Дата: 28.11.19 03:56
Оценка:
Здравствуйте, nt2000, Вы писали:

N>
static System.Collections.Generic.SortedDictionary<int,string> Mymetod(System.Collections.Generic.SortedDictionary<string, int> dic1, int mn, int mx)
N>{
N>    var dic2 = new System.Collections.Generic.SortedDictionary<int, string> { };
N>        ...

N>Почену мне дис2 приходится переобъявлять? (вотличии от дис1)
Как раз наоборот. Тип для Dic1 приходится выписывать, а тип для dic2 выводится автоматически. "переобъявлением было бы
System.Collections.Generic.SortedDictionary<int, string> dic2 = new System.Collections.Generic.SortedDictionary<int, string>();

Избавиться от типа в правой части не получится — потому, что никакого отношения к заголовку он не имеет. Там же можно написать любой тип:
var dic2 = new string();


Есть два способа упростить код.
1. Ввести алиас для типа и сослаться на него во всех трёх местах:
using MyDic = System.Collections.Generic.SortedDictionary<int, string>;
...
static MyDic Mymetod(MyDic dic1, int mn, int mx)
{
    var dic2 = new MyDic();
        ...

2. Ввести генерик-параметр с констреинтом:
static T Mymetod<T>(T dic1, int mn, int mx) where T: System.Collections.Generic.SortedDictionary<int, string>, new()
{
    var dic2 = new T();
        ...
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[2]: Metоды понимают свои заголовки?
От: nt2000  
Дата: 28.11.19 08:48
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>Избавиться от типа в правой части не получится — потому, что никакого отношения к заголовку он не имеет.


Я не про ВАР а о том что дис2 надо предварительно объявлять а с дис1 можно сразу начать работать хотя они оба уже описаны в заголовке.. А так спасибо за пояснения — выписал для себя. А как тебе поставить высшую оценку не знаю там нет нужных кнопок
Re[3]: Metоды понимают свои заголовки?
От: Sinclair Россия https://github.com/evilguest/
Дата: 28.11.19 09:11
Оценка:
Здравствуйте, nt2000, Вы писали:

N>Я не про ВАР а о том что дис2 надо предварительно объявлять а с дис1 можно сразу начать работать хотя они оба уже описаны в заголовке..

Dic2 в заголовке вовсе не описан. Откуда он там взялся?
Это в Delphi внутри функции всегда определена "переменная" Result, которая имеет тип её результата.
А в C# есть return statement; что в нём укажешь — то и вернётся.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[4]: Metоды понимают свои заголовки?
От: nt2000  
Дата: 28.11.19 19:57
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>Dic2 в заголовке вовсе не описан. Откуда он там взялся?


a вот между словами static и Mymetod >
static System.Collections.Generic.SortedDictionary<int,string> Mymetod(System.Collections.Generic.SortedDictionary<string, int> dic1, int mn, int mx)
{
     var dic2 = new System.Collections.Generic.SortedDictionary<int, string> { };
     ...


перед названием метода один словарь а второй после названия в скобочках..
Re[5]: Metоды понимают свои заголовки?
От: nikov США http://www.linkedin.com/in/nikov
Дата: 28.11.19 20:31
Оценка: 2 (1) +1
Здравствуйте, nt2000, Вы писали:

N>Здравствуйте, Sinclair, Вы писали:


S>>Dic2 в заголовке вовсе не описан. Откуда он там взялся?


N>a вот между словами static и Mymetod >

N>
static System.Collections.Generic.SortedDictionary<int,string> Mymetod(System.Collections.Generic.SortedDictionary<string, int> dic1, int mn, int mx)
N>{
N>     var dic2 = new System.Collections.Generic.SortedDictionary<int, string> { };
N>     ...


N>перед названием метода один словарь а второй после названия в скобочках..


Это return type (тип результата функции). Он никак не связан с локальной переменной dic2. Ну, может быть, как-то связан в твоём понимании этой функции, но компилятор про это ничего не знает. Да и как он мог бы это знать? Что там у тебя на самом деле вместо "..."?

Кстати, в начале файла можно написать
using System.Collections.Generic;

чтобы не повторять это при каждом упоминании SortedDictionary.
Re[6]: Metоды понимают свои заголовки?
От: nt2000  
Дата: 28.11.19 20:45
Оценка:
Здравствуйте, nikov, Вы писали:


N>>
static System.Collections.Generic.SortedDictionary<int,string> Mymetod(System.Collections.Generic.SortedDictionary<string, int> dic1, int mn, int mx)
N>>{
N>>     var dic2 = new System.Collections.Generic.SortedDictionary<int, string> { };
N>>     ...


N>>перед названием метода один словарь а второй после названия в скобочках..


N>Это return type (тип результата функции). Он никак не связан с локальной переменной dic2.


Dык эту локальную перененную дис2 я и написал. Вот и спрашиваю зачем пишу ещё раз если один раз уже написано в заголивке.
Re[7]: Metоды понимают свои заголовки?
От: nikov США http://www.linkedin.com/in/nikov
Дата: 28.11.19 23:45
Оценка: 3 (1)
Здравствуйте, nt2000, Вы писали:

N>Здравствуйте, nikov, Вы писали:



N>>>
static System.Collections.Generic.SortedDictionary<int,string> Mymetod(System.Collections.Generic.SortedDictionary<string, int> dic1, int mn, int mx)
N>>>{
N>>>     var dic2 = new System.Collections.Generic.SortedDictionary<int, string> { };
N>>>     ...


N>>>перед названием метода один словарь а второй после названия в скобочках..


N>>Это return type (тип результата функции). Он никак не связан с локальной переменной dic2.


N>Dык эту локальную перененную дис2 я и написал. Вот и спрашиваю зачем пишу ещё раз если один раз уже написано в заголивке.


Про dic2 в заголовке ничего не написано. Просто return type функции совпадает с типом, который ты явно указал для dic2 в теле функции. Но это никоим образом не означает, что в заголовке что-либо написано про dic2, или же что-то написанное там каким-либо образом связано с dic2.
Re[5]: Metоды понимают свои заголовки?
От: Sinclair Россия https://github.com/evilguest/
Дата: 29.11.19 03:45
Оценка: 3 (1)
Здравствуйте, nt2000, Вы писали:

N>перед названием метода один словарь а второй после названия в скобочках..

Всё верно. Но! Тип перед названием метода и dic2 не имеют друг к другу никакого отношения.
Каким бы образом компилятор узнал, что dic2 имеет такой же тип, как результат метода?
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[8]: Metоды понимают свои заголовки?
От: nt2000  
Дата: 30.11.19 18:49
Оценка:
Здравствуйте, nikov, Вы писали:

N>Про dic2 в заголовке ничего не написано. Просто return type функции совпадает с типом, который ты явно указал для dic2 в теле функции. Но это никоим образом не означает, что в заголовке что-либо написано про dic2, или же что-то написанное там каким-либо образом связано с dic2.


a-a-a, vot оно что.. ну спасибо за твое терпение..
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.