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)
Здравствуйте, nt2000, Вы писали: N>Почену мне дис2 приходится переобъявлять? (вотличии от дис1)
Потому что вернуть можно совсем не то, что написано в заголовке. Например, можно вернуть null. Или какого-нибудь наследника от написанного в заголовке. Блин, да в заголовке вообще интерфейс может быть написан...
Всё, что нас не убивает, ещё горько об этом пожалеет.
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();
...
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Здравствуйте, Sinclair, Вы писали:
S>Избавиться от типа в правой части не получится — потому, что никакого отношения к заголовку он не имеет.
Я не про ВАР а о том что дис2 надо предварительно объявлять а с дис1 можно сразу начать работать хотя они оба уже описаны в заголовке.. А так спасибо за пояснения — выписал для себя. А как тебе поставить высшую оценку не знаю там нет нужных кнопок
Здравствуйте, nt2000, Вы писали:
N>Я не про ВАР а о том что дис2 надо предварительно объявлять а с дис1 можно сразу начать работать хотя они оба уже описаны в заголовке..
Dic2 в заголовке вовсе не описан. Откуда он там взялся?
Это в Delphi внутри функции всегда определена "переменная" Result, которая имеет тип её результата.
А в C# есть return statement; что в нём укажешь — то и вернётся.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Здравствуйте, 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> { };
...
перед названием метода один словарь а второй после названия в скобочках..
Здравствуйте, 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.
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 я и написал. Вот и спрашиваю зачем пишу ещё раз если один раз уже написано в заголивке.
Здравствуйте, 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.
Здравствуйте, nt2000, Вы писали:
N>перед названием метода один словарь а второй после названия в скобочках..
Всё верно. Но! Тип перед названием метода и dic2 не имеют друг к другу никакого отношения.
Каким бы образом компилятор узнал, что dic2 имеет такой же тип, как результат метода?
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Здравствуйте, nikov, Вы писали:
N>Про dic2 в заголовке ничего не написано. Просто return type функции совпадает с типом, который ты явно указал для dic2 в теле функции. Но это никоим образом не означает, что в заголовке что-либо написано про dic2, или же что-то написанное там каким-либо образом связано с dic2.
a-a-a, vot оно что.. ну спасибо за твое терпение..