Moжет ли переменная быть значением другой переменной?
От: nt2000  
Дата: 11.10.19 08:16
Оценка:
Подставлять переменную.. хотелось бы..
Re: ref
От: Jack128  
Дата: 11.10.19 08:34
Оценка:
Здравствуйте, nt2000, Вы писали:

N>Подставлять переменную.. хотелось бы..


using System;
                    
public class Program
{
    public static void Main()
    {
        var a = 1;
        var b = 20;
        ref int x = ref (a > 5) ? ref a : ref b;
        
        Print();
        x = 15;
        Print();
        
        void Print() { Console.WriteLine($"a = {a}; b = {b}"); }
    }
}
Re[2]: ref Получилось, спасибо..
От: nt2000  
Дата: 11.10.19 10:56
Оценка:
Здравствуйте, Jack128, Вы писали:

Почему 2 раза реф заставляют указывать, интересно?
ref string s = ref (s1.Length > s2.Length ? ref s1 : ref s2);
не достаточно так:
ref string s = ref (s1.Length > s2.Length ? s1 : s2);
или так:
ref string s = s1.Length > s2.Length ? ref s1 : ref s2;

ещё оказывается можно метод всунуть в метод.. классная штучка! а мс всё скрывает..
Re[3]: ref Получилось, спасибо..
От: Jack128  
Дата: 11.10.19 12:23
Оценка:
Здравствуйте, nt2000, Вы писали:

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


N>Почему 2 раза реф заставляют указывать, интересно?
ref string s = ref (s1.Length > s2.Length ? ref s1 : ref s2);
не достаточно так:

N>
ref string s = ref (s1.Length > s2.Length ? s1 : s2);

потому что это эквивалентно примерно такому коду:
string temp = s1.Length > s2.Length ? s1 : s2;
ref string s = ref temp;

Вряд ли это то, чего ты хочешь добиться. Поэтому такой синтаксис и запретили. Чтоб исключить подобные ошибки

N>или так:
ref string s = s1.Length > s2.Length ? ref s1 : ref s2;

а вот тут не могу сказать. Мне самому не понятно.

N>ещё оказывается можно метод всунуть в метод.. классная штучка! а мс всё скрывает..

Вообще то трубит во все трубы.
Re[3]: ref Получилось, спасибо..
От: alexzzzz  
Дата: 11.10.19 12:42
Оценка:
Здравствуйте, nt2000, Вы писали:

N>ещё оказывается можно метод всунуть в метод.. классная штучка! а мс всё скрывает..


МС ничего не скрывает, но фича эта появилась в языке всего пару лет назад, и твоя книжка по C# про неё может не знать.
Re[4]: ref Получилось, спасибо..
От: alexzzzz  
Дата: 11.10.19 12:44
Оценка: 8 (1)
Здравствуйте, Jack128, Вы писали:

N>>или так:
ref string s = s1.Length > s2.Length ? ref s1 : ref s2;

J>а вот тут не могу сказать. Мне самому не понятно.

string temp;
if (s1.Length > s2.Length)
    temp = ref s1;
else
    temp = ref s2;
ref string s = temp;


Тоже фигня какая-то получается.

PS
Кстати, = и ref это не два разных слова друг за другом, а единый ref assignment operator: =ref

ref string s = ref (...)

а в скобочках должно стоять что-то, что возвращает ссылку.
Отредактировано 11.10.2019 12:55 alexzzzz . Предыдущая версия . Еще …
Отредактировано 11.10.2019 12:55 alexzzzz . Предыдущая версия .
Отредактировано 11.10.2019 12:53 alexzzzz . Предыдущая версия .
Отредактировано 11.10.2019 12:50 alexzzzz . Предыдущая версия .
Re[2]: ref
От: okon  
Дата: 12.10.19 12:39
Оценка: +1
J>public class Program
J>{
J> public static void Main()
J> {
J> var a = 1;
J> var b = 20;
J> ref int x = ref (a > 5) ? ref a : ref b;
\
А зачем такое писать, какую проблему этим решаете, в какой задаче нельзя написать более человечно ?
”Жить стало лучше... но противнее. Люди которые ставят точку после слова лучше становятся сторонниками Путина, наши же сторонники делают акцент на слове противнее ( ложь, воровство, лицемерие, вражда )." (с) Борис Немцов
Re: Moжет ли переменная быть значением другой переменной?
От: Shmj Ниоткуда  
Дата: 13.10.19 00:12
Оценка:
Здравствуйте, nt2000, Вы писали:

N>Подставлять переменную.. хотелось бы..


Уже разобрались с типами "по значению" и типами "ссылочными"? Это основа.
Re[4]: ref Получилось, спасибо..
От: nt2000  
Дата: 14.10.19 08:42
Оценка:
Здравствуйте, alexzzzz, Вы писали:

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


N>>ещё оказывается можно метод всунуть в метод.. классная штучка! а мс всё скрывает..


A>МС ничего не скрывает, но фича эта появилась в языке всего пару лет назад, и твоя книжка по C# про неё может не знать.


да, и про реф не зает..

Unexpected symbol 'ref'


потом пытался всунуть во внутренний метод — выдаёт ошибку.. прошлось вывести во внешний, а там вынужден был переобъявлять все нужные перененные..
Re[3]: ref
От: nt2000  
Дата: 14.10.19 08:55
Оценка:
Здравствуйте, okon, Вы писали:


J>>public class Program

J>>{
J>> public static void Main()
J>> {
J>> var a = 1;
J>> var b = 20;
J>> ref int x = ref (a > 5) ? ref a : ref b;
O> \
O>А зачем такое писать, какую проблему этим решаете, в какой задаче нельзя написать более человечно ?
дык это же мне как образец показали.. а решает многое, как я поянял, это подобие процедур, функций, методов...
то есть, позволяет пистать нечто такое:
 a > b  ?  a : b = c ;
да, moжно писать иначе, так же как можно функции не вызыватъ.. хотя в ооп может и без методов никак..
Re[2]: да, разобрались..
От: nt2000  
Дата: 14.10.19 08:58
Оценка:
Здравствуйте, Shmj, Вы писали:
N>>Подставлять переменную.. хотелось бы..
S>Уже разобрались с типами "по значению" и типами "ссылочными"? Это основа.
переходим на даты.. сейчас появится вопрос..)
Re[4]: ref
От: okon  
Дата: 14.10.19 08:59
Оценка:
O>>А зачем такое писать, какую проблему этим решаете, в какой задаче нельзя написать более человечно ?
N>дык это же мне как образец показали.. а решает многое, как я поянял, это подобие процедур, функций, методов...
N>то есть, позволяет пистать нечто такое:
 a > b  ?  a : b = c ;
да, moжно писать иначе, так же как можно функции не вызыватъ.. хотя в ооп может и без методов никак..


Окей т.е. это какая-то задача типа эрудиция или собеседование тогде понятно.
Но было бы интересно из какой проблемы она выросла или же просто придумано чтобы было сложнее.
Ты написал объяснение, но я ничего не понял, что за подобие процедур, можно чуть детальнее по шагам.
И вот это не понимаю "так же как можно функции не вызыватъ.. хотя в ооп может и без методов никак.."
”Жить стало лучше... но противнее. Люди которые ставят точку после слова лучше становятся сторонниками Путина, наши же сторонники делают акцент на слове противнее ( ложь, воровство, лицемерие, вражда )." (с) Борис Немцов
Re[3]: да, разобрались..
От: Mr.Delphist  
Дата: 17.10.19 13:33
Оценка:
Здравствуйте, nt2000, Вы писали:

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

N>>>Подставлять переменную.. хотелось бы..
S>>Уже разобрались с типами "по значению" и типами "ссылочными"? Это основа.
N>переходим на даты.. сейчас появится вопрос..)

Упреждая: Потому что DateTime — это структура, а не класс!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.