7 / 6 / 6
Регистрация: 20.03.2011
Сообщений: 350
1

Как получить в виде строки имя самой переменной?

13.08.2013, 19:11. Показов 38199. Ответов 33
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
например объявлена переменная
C#
1
string name = "Ivanov";
Как получить в виде переменой само имя "name"?
Т.е. в вывести в консоль такой текст:
имя переменной: name
значение переменной: Ivanov
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.08.2013, 19:11
Ответы с готовыми решениями:

Как получить имя переменной, или преобразовать ее в строковую константу?
С#.Всем привет. Как получить имя переменной, или преобразовать ее в строковую константу

получить имя файла или как вычесть строку из строки)
всем привет. Вот чето я затупил... У меня есть строка полный путь к файлу и строка которая...

Получить имя переменной, зависимой от цикла
Доброго времени суток. Есть некий цикл. Можно ли каким-то образом получить автоматически имя...

Имеются две функции в виде строк, нужно перемножить их и получить новую функцию в виде строки
Доброго времени суток, имеются две функции в виде строк, нужно перемножить их и получить новую...

33
Master of Orion
Эксперт .NET
6098 / 4954 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
13.08.2013, 20:05 2
Никак.

Или приведите полный пример.
1
7 / 6 / 6
Регистрация: 20.03.2011
Сообщений: 350
13.08.2013, 21:42  [ТС] 3
Цитата Сообщение от Psilon Посмотреть сообщение
Никак.

Или приведите полный пример.
очень жаль.
0
Master of Orion
Эксперт .NET
6098 / 4954 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
13.08.2013, 22:18 4
polsok, я не могу придумать пример, в котором это было бы необходимо. Как говорил Сент Экзюпери "идеал это не когда нечего добавить, но когда нечего отнять". Раз без этой возможности легко можно обойтись, значит она не нужна.
2
7 / 6 / 6
Регистрация: 20.03.2011
Сообщений: 350
14.08.2013, 10:10  [ТС] 5
Цитата Сообщение от Psilon Посмотреть сообщение
polsok, я не могу придумать пример, в котором это было бы необходимо. Как говорил Сент Экзюпери "идеал это не когда нечего добавить, но когда нечего отнять". Раз без этой возможности легко можно обойтись, значит она не нужна.
Если нельзя получить имя переменной можно ли получить имена классов, свойств, динамических массивов; конечно если в них специально не прописано их имя.
0
Master of Orion
Эксперт .NET
6098 / 4954 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
14.08.2013, 10:11 6
polsok, можно. Но по "значению" получить "имя" нельзя.
А для локальных переменных, в отличие от полей и свойств, ваще ничо узнать нельзя.
1
7 / 6 / 6
Регистрация: 20.03.2011
Сообщений: 350
14.08.2013, 10:32  [ТС] 7
Цитата Сообщение от Psilon Посмотреть сообщение
polsok, можно. Но по "значению" получить "имя" нельзя.
А для локальных переменных, в отличие от полей и свойств, ваще ничо узнать нельзя.
Как например вывести в консоли имя свойства?
C#
1
2
3
4
public class People
{
    public String Name {get; set; };
}
0
Master of Orion
Эксперт .NET
6098 / 4954 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
14.08.2013, 17:18 8
C#
1
2
3
4
5
6
7
8
9
10
11
12
// Get the type of 'MyClass'.
         Type myType = typeof(People);
 
         // Get the information related to all public member's of 'MyClass'. 
         myMemberInfo = myType.GetMembers();
 
         Console.WriteLine( "\nThe members of class '{0}' are :\n", myType); 
         for (int i =0 ; i < myMemberInfo.Length ; i++)
         {
            // Display name and type of the concerned member.
            Console.WriteLine( "'{0}' is a {1}", myMemberInfo[i].Name, myMemberInfo[i].MemberType);
         }
4
100 / 100 / 33
Регистрация: 20.09.2014
Сообщений: 457
Записей в блоге: 3
18.02.2016, 13:41 9
Цитата Сообщение от Psilon Посмотреть сообщение
я не могу придумать пример, в котором это было бы необходимо.
Как вариант:
C#
1
2
3
4
5
public void DoSomething(object obj)
{
if (obj == null) throw new ArgumentNullException("obj");
//
}
вместо "obj" имя параметра программно получать, так как завтра obj может переименоваться
0
Эксперт .NET
1838 / 1346 / 427
Регистрация: 10.06.2011
Сообщений: 2,126
18.02.2016, 14:39 10
polsok, в C# 6.0 появилось ключевое слово nameof. Самому его использовать ещё не приходилось. Но думаю, что Вам сгодится.

Не по теме:

Ёптель, тема 2,5 летней давности......

3
100 / 100 / 33
Регистрация: 20.09.2014
Сообщений: 457
Записей в блоге: 3
18.02.2016, 14:59 11
novikov.ea, Спасибо!
Цитата Сообщение от novikov.ea Посмотреть сообщение
Ёптель, тема 2,5 летней давности......
Я для себя интересовался
0
Master of Orion
Эксперт .NET
6098 / 4954 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
18.02.2016, 15:32 12
Serg34, ну блин, я писал это в 2013 году, учитывая, что я начал заниматься программированием в 2011, а шарпом - 2012... дата регистрации как бы намекает. Щас-то понятно, зачем все это Это же парадокс Блаба, известная тема

Добавлено через 1 минуту
Небольшая простыня, но очень рекомендую к прочтению
Кликните здесь для просмотра всего текста
Что же в Lisp'е такого прекрасного? Если он такой замечательный, почему его не используют все? Казалось бы, риторические вопросы, но на самом деле на них есть прямые ответы. Lisp настолько хорош не тем, что в нем есть некое волшебное качество, видимое только его приверженцам, а тем, что он — самый мощный язык программирования из существующих.
И причина того, что все вокруг пишут не на Lisp'е, заключается в том, что выбор языка программирования — вопрос не только технологии, но также и привычки, а ничто не меняется так медленно, как привычки. Конечно, оба эти тезиса требуют разъяснений.

Я начну с шокирующего утверждения: языки программирования отличаются друг от друга своей мощностью.
По крайней мере мало кто будет спорить, что высокоуровневые языки более мощные, чем машинный язык. Большинство программистов согласятся, что, как правило, программировать стоит не на машинном языке, а на каком-нибудь языке высокого уровня, переводя программу в машинный код с помощью компилятора. Сейчас эта идея получила даже аппаратное воплощение — с восьмидесятых годов команды процессоров разрабатываются скорее для компиляторов, чем для программистов.
Каждый знает, что писать всю программу вручную на машинном языке — ошибочно. Но гораздо реже понимают то, что существует и более общий принцип: при наличии выбора из нескольких языков ошибочно программировать на чем-то, кроме самого мощного, если на выбор не влияют другие причины.

Все языки одинаково мощные, если рассматривать их с точки зрения эквивалентности машине Тьюринга, но это не та мощь, которая важна программисту. (Никто ведь не хотел бы программировать машину Тьюринга). Мощь языка, в которой заинтересован программист, возможно, трудно определить формальными методами, однако одно из объяснений этого понятия заключается в свойствах, которые в менее мощном языке можно получить, только написав на нем интерпретатор для более мощного языка. Если в языке A есть оператор для удаления пробелов из строк, а в языке B его нет, это не делает A более мощным, чем B, так как в B можно написать процедуру, которая делала бы это.

Но, скажем, если язык A поддерживает рекурсию, а B — нет, это нечто, что нельзя исправить написанием библиотечных функций.
Есть много исключений из этого правила. Если вы пишете программу, которая должна тесно взаимодействовать с программой, написанной на определенном языке, возможно, окажется разумным писать новую программу на том же языке.

Если вы пишете программу, которая должна делать что-то очень простое, вроде численной обработки больших массивов данных или манипуляций с битами, можно использовать язык не самого высокого уровня абстракции, тем более что программа будет слегка быстрее.

Если вы пишете короткую программу, которую используете один раз и выбросите прочь, возможно, следует использовать тот язык, который имеет лучшие библиотечные функции для данной задачи.
Но в целом для программного обеспечения нужно использовать самый мощный (и приемлемо эффективный) язык из всех доступных. Отличный от этого выбор — это ошибка такого же рода, как упор на программирование в машинных кодах, хотя и с меньшими негативными последствиями.

Понятно, что уровень машинного языка очень низок. А высокоуровневые языки часто рассматриваются как одинаковые, по-крайней мере, так принято считать. Но это не так. Технический термин "язык программирования высокого уровня" не обозначает ничего определенного. Не существует четкой границы между множеством "машинных" языков с одной стороны, и множеством "высокоуровневых" с другой. Языки распределены в континууме (возможно, не просто континуум, а некая структура, уменьшающяяся кверху;
важна здесь не форма, а сама идея о том, что существует по крайней мере частичный порядок) абстрактности, начиная от самых мощных "языков высокого уровня" вниз к "машинным языкам", которые, в свою очередь, тоже отличаются друг от друга по мощности.

Возьмем Cobol. Cobol — язык высокого уровня, так как компилируется в машинный язык. Но станет ли кто-нибудь утверждать, что по мощности Cobol эквивалентен, скажем, Python'у? Возможно, он ближе к машинному языку, чем Python.

А как насчет Perl четвертой версии? В Perl 5 в язык были добавлены лексические замыкания (lexical closures). Большинство Perl хакеров согласятся, что Perl 5 мощнее, чем Perl 4. Но раз вы это признали, вы признали, что один высокоуровневый язык может быть мощнее другого. Из этого неизбежно следует, что использовать нужно самый мощный язык.

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

Программисты очень привязываются к своим любимым языкам, а я не хочу оскорбить ничьи чувства, поэтому я объясню свою позицию, используя гипотетический язык с названием Блаб.

Блаб попадает в середину континуума абстрактности. Это не самый мощный язык, но он мощнее, чем Cobol или машинный язык.
И на самом деле, наш гипотетический программист на Блабе не будет использовать ни Cobol, ни машинный код. Для машинных кодов есть компиляторы. Что же касается Cobol'а, наш программист не знает, как на этом языке вообще что-то можно сделать. В Cobol'е даже нет некой возможности X, присутствующей в Блабе.

Когда наш гипотетический Блаб-программист смотрит вниз на континуум мощности языков, он знает, что смотрит вниз. Менее мощные, чем Блаб, языки явно менее мощны, так как в них нет некой особенности, к которой привык программист. Но когда он смотрит в другом направлении, вверх, он не осознает, что смотрит вверх. То, что он видит, — это просто "странные" языки. Возможно, он считает их одинаковыми с Блабом по мощности, но со всяческими сложными штучками. Блаба для нашего программиста вполне достаточно, так как он думает на Блабе.

Когда мы поменяем точку обзора программиста, используя любой язык программирования выше по континууму мощности, мы обнаружим, что теперь программист смотрит на Блаб сверху вниз. "Как же можно что-то сделать, используя Блаб? В нем отсутствует даже конструкция Y!"

Используя метод индукции, приходишь к выводу, что только те программисты, которые понимают самый мощный язык, в состоянии осознать полную картину разницы в мощности между различными языками (видимо, именно это имел ввиду Эрик Реймонд, когда говорил о том, что Lisp сделает вас лучше как программиста). Следуя парадоксу Блаба, нельзя доверять мнению других: другие программисты довольны тем языком, который используют, потому что этот язык определяет способ их программистского мышления.

Я знаю это из своего опыта, когда учился в старших классах школы и писал программы на Бейсике. Этот язык не поддерживал даже рекурсию. Трудно представить написание программ без рекурсии, но в то время мне это не нужно было. Я думал на Бейсике. Я был спец. Мастер всего, что изучил.

Пять языков, которые советует хакерам Эрик Реймонд, находятся в разных точках континуума мощности, и то, где они находятся относительно друг друга, — тонкий вопрос. Я скажу, что Lisp находится на вершине континуума. И чтобы поддержать это утверждение, я скажу о том, чего мне не хватает, когда я смотрю на остальные пять языков. Как же можно что-то сделать с ними, думаю я, без свойства Z? И самое большое Z — это макросы. (Рассматривать макросы как отдельное свойство — это немного неправильно. На практике их польза увеличивается такими свойствами Lisp'а, как лексические замыкания и частичная параметризация (rest parameters).

Во многих языках есть что-то, называющееся макросом. Но макросы в Lisp'е уникальны. То, что делают макросы имеет отношение, верите вы или нет, к скобкам. Создатели Lisp'а добавили все эти скобки в язык не для того, чтобы отличаться от других. Скобки в Lisp'е имеют особый смысл, они — внешнее свидетельство фундаментальной разницы между Lisp'ом и другими языками.
Программа на Lisp'е состоит из данных. И не в том тривиальном значении, что исходные файлы содержат символы, а строки — один из типов данных, поддерживаемых языком. После прочтения программы парсером Lisp код состоит из готового к использованию дерева структур данных.

Дело не в том, что в Lisp'е странный синтаксис, скорее, его нет вообще. Программы пишутся в готовых синтаксических деревьях, которые в других языках генерируются парсером во время разбора исходного текста. Эти синтаксические деревья в Lisp'е полностью доступны вашим программам, и вы можете писать программы, которые изменяют эти деревья. В Lisp'е подобные программы называются макросы. Это программы, которые пишут программы.

Программы, которые пишут программы? И когда же такое может понадобиться?

Не очень часто, если вы думаете на Cobol'е. И постоянно, если вы думаете на Lisp'е. Было бы удобно, если бы я дал пример мощного макроса и сказал бы: "Вот! Смотрите!". Но если бы я и привел пример, для того, кто не знает Lisp, он выглядел бы не более чем белиберда. Рамки данной статьи не позволяют изложить все необходимое для понимания подобного примера. В книге Ansi Common Lisp я старался излагать материал как можно быстрее, но даже так я не добрался до макросов раньше страницы 160.
Однако мне кажется, что я могу дать убедительный аргумент. Исходный текст редактора Viaweb на 20-25 процентов состоял из макросов. Макросы сложнее писать, чем обычные функции Lisp'а, и считается дурным тоном использовать их там, где можно без них обойтись. Поэтому каждый макрос в той программе был необходим. Это значит, что примерно 20-25 процентов кода в программе делают то, что нельзя просто сделать на других языках.

Как бы скептически ни относился Блаб-программист к моим заявлениям о таинственной мощи Lisp'а, это должно его заинтересовать. Мы не писали этот код для своего собственного развлечения. Мы были маленькой компанией, и программировали так, как только могли, чтобы возвести технологический барьер между нами и нашими конкурентами.

Пытливый читатель может задаться вопросом, а нет ли здесь взаимосвязи? Некоторая большая часть кода делала нечто, что очень сложно сделать на других языках. Получившееся в результате программное обеспечение делало то, что программное обеспечение наших соперников делать не могло. Возможно, между этими фактами есть связь. Я советую вам подумать в этом направлении. Возможно, это все не просто старческие бредни.
1
100 / 100 / 33
Регистрация: 20.09.2014
Сообщений: 457
Записей в блоге: 3
18.02.2016, 16:07 13
Блин, не так я выразился
Мне сейчас помощь нужна была. Наткнулся на тему и решил написать
А по языкам: на данный момент для меня главное простота в изучении и востребованность
0
3457 / 2469 / 695
Регистрация: 02.08.2011
Сообщений: 6,690
18.02.2016, 16:31 14
Psilon, , прикольно. Даю угадаю, три языка из упомянутой пятерки языков: assembler, любой управляемый язык, Lisp. А остальные два какие? Автор указывает? Я так понял, Psilon, вы сейчас Lisp изучаете.
0
Master of Orion
Эксперт .NET
6098 / 4954 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
18.02.2016, 17:13 15
IamRain, полный вариант статьи легко гуглится, но ладно, приложу

Лисп я не изучаю, хотя в универе заставляли, и даже какие-то факториалы я писал. Но серьезно нет, не занимался. Но собираюсь Впрочем эта статья - одна из многих, которые меня в этом направлении толкают. И они правы. Засидеться на одном языке значит сломать свою думательную машину Нужно выходить из зоны комфорта, иначе ничему путному не научишься.

Serg34, у каждого главное свое. Пролог я в свое время изучил, и не пожалел, то же скажу про F#. Звезд с неба не хватал, но элементарный функционал написать мог. Получу диплом на руки - чутка времени освободится, и можно будет похардкорнее заняться, в планах: лисп, хаскель, ассемблер (есть одна крутая книжица). В общем, учить и учить еще И все это только практика. До алгоритмов руки думаю уже и не дойдут: всякие КЧД, графы и прочее.
0
100 / 100 / 33
Регистрация: 20.09.2014
Сообщений: 457
Записей в блоге: 3
19.02.2016, 09:18 16
Psilon, Учиться новому всегда приятно, особенно если это облегчает твою жизнь и если на это есть время(что не мало важно). Но интересно зачем именно хардкорно знать много языков: для расширения мышления или по работе? По-моему только на изучение того, что действительно поможет в работе и позволит увеличить доход тебе и твоей семье и твою востребованность на рынке, не хватит и жизни. И это я считаю огромное преимущество данной профессии-всегда есть куда расти!!!
А изучать невостребованные языки-ну если только как хобби(ИМХО), да и опять же если его мало кто знает, то с кем Вы будете делиться впечатлениями?
Не переубеждаю, просто интересно, потому как я, например, попробовал Java, Visual Basic, C++ (по чуть-чуть) и C# я потом принял сразу и сейчас ни сколько в нем не разочаровался и распыляться на изучение чего-то еще- у меня нет такой привелегии, у Вас видимо времени свободного побольше
0
Master of Orion
Эксперт .NET
6098 / 4954 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
19.02.2016, 10:14 17
Serg34, это однотипные языки, и смысла изучать их нет. Нужно изучать свой язык со своим подходом. Пролог - совсем не такой, как Java/C++/C#, которые вообще к одому семейству отнести можно. Лисп/хаскель - третий подход, тоже совсем иной. Ну и четвертый - декларативное - это можно SQL какой-нибудь использовать. Вряд ли опыт написания кода на C# поможет правильно составлять запросы на SQL, правда? Зато после работы с ним можно очень хорошо научиться запросы и в LINQ составлять Вот так, кросс-языковое взаимодействие и помогает. Лисп позволяет использовать делегаты на полную, как и дженерики, без его изучения вряд ли я бы смог так ими оперировать. И это еще не предел, лисп я знаю совсем немного, но уже этого хватило для качественного скачка. И ни в одном языке нет лисповых макросов.

Я не говорю, что го все на лисп. Вместо лиспа можно подставить любой другой нетипичный язык - хаскель, окамл, что угодно. Смысл выйти из сферы комфорта, заставить себя учиться. Это весьма немаловажно. Это как человеку сказать, что нужно увидеть мир, а он обошел пару окрестных дворов, и вернулся сказав, что ничего милее родного двора не сыщешь А Java/C++/VB это и есть окрестные дворы шарпа.
0
100 / 100 / 33
Регистрация: 20.09.2014
Сообщений: 457
Записей в блоге: 3
19.02.2016, 11:21 18
Psilon,Вообще, полезно, конечно. Но всему свое время, мое видимо еще не пришло. А что на Ваш взгляд лучше изучать после Шилда, Рихтера и Паттернов Гофа? Я сейчас про правила хорошего тона читаю. Вот, например, полезная книга, правда воды многовато
0
Master of Orion
Эксперт .NET
6098 / 4954 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
19.02.2016, 14:15 19
Цитата Сообщение от Serg34 Посмотреть сообщение
Вообще, полезно, конечно. Но всему свое время, мое видимо еще не пришло. А что на Ваш взгляд лучше изучать после Шилда, Рихтера и Паттернов Гофа? Я сейчас про правила хорошего тона читаю. Вот, например, полезная книга, правда воды многовато
Лично я рихтера не читал, заснул после первых 50 страниц. Тем более я с ним во многом не согласен. например в самом начале он пишет, что типа управляемые языки это так круто, потому что у них есть возможность оптмизировать, как никакой С++ компилятор не сможет. В мире розовых пони и бабочек возможно так и есть, а на практике нативная компиляция всегда будет быстрее. Быстрее её может быть только опять же нативная компиляция, но уже на целевой машине, по типу NGEN'а. То есть когда при установке приложения оно комплириуется под конкретное устройство. В Андройде последней версии такое реализовали, ART называется, очень клевая штука Ну и все в таком духе.

Я бы почитал Pro .Net performance (есть перевод на русский), очень качественная книжеца. Я бы её назвал "Рихтер без воды". Ну а там что угодно - у Джона Скита есть классная C# In Depth, я правда не читал, но слышал много хорошего о ней, ну а с самим Скитом разговаривал лично на SO Впрочем, чего еще от него ожидать, топ-1 человек самого SO , почти с миллионом репутации на сайте - слава говорит сама за себя
2
3457 / 2469 / 695
Регистрация: 02.08.2011
Сообщений: 6,690
19.02.2016, 16:03 20
Цитата Сообщение от Psilon Посмотреть сообщение
Я бы почитал Pro .Net performance (есть перевод на русский)
Лежит на книжной полке, жду, не могу, когда начну читать, но пока она все еще n-ая в очереди на прочтение, поскольку ушел в web-технологии, а там много чего своего.
Даже если мельком почитать, много интересного, причем Гольдштейн излагает убедительно и без воды.
0
19.02.2016, 16:03
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.02.2016, 16:03
Помогаю со студенческими работами здесь

Как присвоить имя переменной равное аргументу другой переменной?
В общем вопрос такой: Допустим есть переменная string i= &quot;qwer&quot;, хочу создать другую переменную ...

В переменной типа string хранится имя переменной, к которой нужно обратиться. Как это сделать?
Пример: int speed = 10; string s = &quot;speed&quot;; MessageBox.Show(/*как-то обратиться к...

Имя переменной как переменная. Как получить доступ к такой переменной?
Подскажите как получать данные из переменной, если ее имя вычисляется? И соответственно как потом...

Получить адрес переменной, и сохранить в виде строки
Как получить адреc переменной, и записать этот адрес в другую переменную в виде строки std::string?


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru