Что касается вопроса «Получить имя параметра из вызывающего метода и найти имя переменной, передаваемой функции в C#», я все еще ищу способ определитьWhatDoesTheAnimalSay_WANTEDМетод : я хочу узнать имя переменной, которая используется в качестве параметра:
public class Farm
{
public readonly string Cow = "Muuuuhh";
public string Cat { get; set; }
public void MainFunction()
{
var dog = "WauWau";
var kiwi = new Bird("QueeeekQueeek");
Cat = "Miiiaaauuuu";
// This one works but looks kinda ugly and is cumbersome when used
WhatDoesTheAnimalSay(nameof(dog), dog);
WhatDoesTheAnimalSay(nameof(Cow), Cow);
WhatDoesTheAnimalSay(nameof(Cat), Cat);
WhatDoesTheAnimalSay(nameof(kiwi), kiwi);
WhatDoesTheAnimalSay_WRONG1(dog);
WhatDoesTheAnimalSay_WRONG2(dog);
WhatDoesTheAnimalSay_WANTED(dog);
WhatDoesTheAnimalSay_WANTED(Cow);
}
public void WhatDoesTheAnimalSay(string name, T says)
{
MessageBox.Show("The " + name + " says: " + says);
// Shows i.e.: The dog says: WauWau
}
public void WhatDoesTheAnimalSay_WRONG1(T says)
{
MessageBox.Show("The " + nameof(says) + " says: " + says);
// Shows: The says says: WauWau
}
public void WhatDoesTheAnimalSay_WRONG2(T says, [CallerMemberName] string name = null)
{
MessageBox.Show("The " + name + " says: " + says);
// Shows: The MainFunction says: WauWau
}
public void WhatDoesTheAnimalSay_WANTED(T says /*, ?????*/)
{
MessageBox.Show("The " /*+ ?????*/ + " says: " + says);
// Shows: The dog says: WauWau
}
}
// Just here to show it should work with a class as well.
public class Bird
{
public string Says { get; } //readonly
public Bird(string says) {
Says = says;
}
public override string ToString()
{
return Says;
}
}
В реальной жизни мне это нужно при реализации интерфейса IXmlSerializable в моих классах с помощью пользовательских Reader.Read... и Writer.Write. ... методы.
Поэтому, к сожалению, я не могу представить новый класс-оболочку, интерфейс > или измените место сохранения имени животного или того, что на нем написано. Это означает, что он должен работать с классами, а также с простой строкой, целым числом, десятичным числом,... переменными, полями или свойствами.
Другими словами (не грубо): Не меняйте способ определения животных, просто измените метод WhatDoesTheAnimalSay_WANTED...
EDIT:
Как некоторые из вас хотели Чтобы узнать реальный вариант использования этого примера, я даю вам представление о том, как я храню и считываю данные в XML-файле. Реальный объект базы данных, конечно, намного больше, и все подклассы (например, Fitter) также реализуют интерфейс IXmlSerializable, используя одни и те же методы расширения.
// This is the Database Class which stores all the data
public class Database : IXmlSerializable
{
// The list of all building sites managed
public List BuildingSites { get; set; }
// The list of all fitters working for the company
public List Fitters { get; set; }
private readonly int DatabaseVersion = 1;
// Write implementation of the IXmlSerializable inteface
public void WriteXml(XmlWriter writer)
{
// Writing all Data into the xml-file
writer.WriteElementInt(nameof(DatabaseVersion), DatabaseVersion);
writer.WriteElementList(nameof(BuildingSites), BuildingSites);
writer.WriteElementList(nameof(Fitters), Fitters);
}
public void ReadXml(XmlReader reader)
{
// Do the reading here
}
public XmlSchema GetSchema() { return null; }
}
public class XmlExtensions
{
// Writing a list into the xml-file
public static void WriteElementList(this XmlWriter writer, string elementName, IEnumerable items)
{
var list = items is List ? items : items.ToList();
// The XML-Element should have the name of the variable in Database!!!
writer.WriteStartElement(elementName);
writer.WriteAttributeString("count", list.Count().ToString());
var serializer = new XmlSerializer(typeof(T));
list.ForEach(o => serializer.Serialize(writer, o, XmlHelper.XmlNamespaces));
writer.WriteEndElement();
}
public static void WriteElementInt(this XmlWriter writer, string elementName, int toWrite)
{
// The XMLElement should have the name of the variable in Database!!!
writer.WriteElementString(elementName, toWrite.ToString(CultureInfo.InvariantCulture));
}
// More here....
}
}
Подробнее здесь: https://stackoverflow.com/questions/376 ... -parameter
Получение имени вызывающей переменной параметра ⇐ C#
Место общения программистов C#
-
Anonymous
1735260280
Anonymous
Что касается вопроса «Получить имя параметра из вызывающего метода и найти имя переменной, передаваемой функции в C#», я все еще ищу способ определитьWhatDoesTheAnimalSay_WANTEDМетод : я хочу узнать имя переменной, которая используется в качестве параметра:
public class Farm
{
public readonly string Cow = "Muuuuhh";
public string Cat { get; set; }
public void MainFunction()
{
var dog = "WauWau";
var kiwi = new Bird("QueeeekQueeek");
Cat = "Miiiaaauuuu";
// This one works but looks kinda ugly and is cumbersome when used
WhatDoesTheAnimalSay(nameof(dog), dog);
WhatDoesTheAnimalSay(nameof(Cow), Cow);
WhatDoesTheAnimalSay(nameof(Cat), Cat);
WhatDoesTheAnimalSay(nameof(kiwi), kiwi);
WhatDoesTheAnimalSay_WRONG1(dog);
WhatDoesTheAnimalSay_WRONG2(dog);
WhatDoesTheAnimalSay_WANTED(dog);
WhatDoesTheAnimalSay_WANTED(Cow);
}
public void WhatDoesTheAnimalSay(string name, T says)
{
MessageBox.Show("The " + name + " says: " + says);
// Shows i.e.: The dog says: WauWau
}
public void WhatDoesTheAnimalSay_WRONG1(T says)
{
MessageBox.Show("The " + nameof(says) + " says: " + says);
// Shows: The says says: WauWau
}
public void WhatDoesTheAnimalSay_WRONG2(T says, [CallerMemberName] string name = null)
{
MessageBox.Show("The " + name + " says: " + says);
// Shows: The MainFunction says: WauWau
}
public void WhatDoesTheAnimalSay_WANTED(T says /*, ?????*/)
{
MessageBox.Show("The " /*+ ?????*/ + " says: " + says);
// Shows: The dog says: WauWau
}
}
// Just here to show it should work with a class as well.
public class Bird
{
public string Says { get; } //readonly
public Bird(string says) {
Says = says;
}
public override string ToString()
{
return Says;
}
}
В реальной жизни мне это нужно при реализации интерфейса IXmlSerializable в моих классах с помощью пользовательских Reader.Read... и Writer.Write. ... методы.
Поэтому, к сожалению, я [b]не могу[/b] представить [b]новый класс-оболочку, интерфейс[/b] > или измените место сохранения имени животного или того, что на нем написано. Это означает, что он должен работать с классами, а также с [b]простой строкой, целым числом, десятичным числом,... переменными, полями или свойствами[/b].
Другими словами (не грубо): Не меняйте способ определения животных, просто измените метод WhatDoesTheAnimalSay_WANTED...
[b]EDIT:[/b]
Как некоторые из вас хотели Чтобы узнать реальный вариант использования этого примера, я даю вам представление о том, как я храню и считываю данные в XML-файле. Реальный объект базы данных, конечно, намного больше, и все подклассы (например, Fitter) также реализуют интерфейс IXmlSerializable, используя одни и те же методы расширения.
// This is the Database Class which stores all the data
public class Database : IXmlSerializable
{
// The list of all building sites managed
public List BuildingSites { get; set; }
// The list of all fitters working for the company
public List Fitters { get; set; }
private readonly int DatabaseVersion = 1;
// Write implementation of the IXmlSerializable inteface
public void WriteXml(XmlWriter writer)
{
// Writing all Data into the xml-file
writer.WriteElementInt(nameof(DatabaseVersion), DatabaseVersion);
writer.WriteElementList(nameof(BuildingSites), BuildingSites);
writer.WriteElementList(nameof(Fitters), Fitters);
}
public void ReadXml(XmlReader reader)
{
// Do the reading here
}
public XmlSchema GetSchema() { return null; }
}
public class XmlExtensions
{
// Writing a list into the xml-file
public static void WriteElementList(this XmlWriter writer, string elementName, IEnumerable items)
{
var list = items is List ? items : items.ToList();
// The XML-Element should have the name of the variable in Database!!!
writer.WriteStartElement(elementName);
writer.WriteAttributeString("count", list.Count().ToString());
var serializer = new XmlSerializer(typeof(T));
list.ForEach(o => serializer.Serialize(writer, o, XmlHelper.XmlNamespaces));
writer.WriteEndElement();
}
public static void WriteElementInt(this XmlWriter writer, string elementName, int toWrite)
{
// The XMLElement should have the name of the variable in Database!!!
writer.WriteElementString(elementName, toWrite.ToString(CultureInfo.InvariantCulture));
}
// More here....
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/37639335/getting-the-calling-variable-name-of-a-parameter[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия