Другие языки программирования и технологии

C#. Как прописать несколько одинаковых функций так, чтобы они возвращали результаты разных типов?

Т.е. имеется класс, который содержит какие-то данные (вернее, одно данное) - одного из трех типов (int, string, datetime). У класса есть свойство, которое возвращает название типа хранимых данных. Вопрос в том, как считать сами эти данные? Т.е., вроде, код должен быть таким: string Field(string FieldName); int Field(string FieldName); DateTime Field(string FieldName); Но ни C# такого ни поддерживает, ни здравая логика. Либо код должен быть таким (используя шаблоны): Field<typeofdata>(string FieldName) Но тут синтаксическая ошибка.
я думаю тут подойдет такой код
object Field(string propertyName)
{
if ( this.GetType().GetProperty(propertyName) != null )
return this.GetType().GetProperty(propertyName).GetValue(this,null);

else throw new ArgumentException("Такого поля не существует");
}
Zurab Karalashvili
Zurab Karalashvili
22 045
Лучший ответ
Вообще-то странная логика! Мало того, что функция имеет одинаковое название и одинаковый тип аргумента, так ещё возвращая данные разного типа мы должны их куда-то присвоить! ? То есть потом появится ещё одна проблема: как принимать данные любого типа?
Ну сделать модно двумя способами функциональный: объявить класс, который содержит все эти три типа и возвратить объект этого класса? А как узнать какой будет объект! ? Ну об этом я сказал выше, хотя в классе можно прописать метку возвращаемого значения.
Или сделать возвращение по ссылке!
Правда это в С++, но вроде должно и там работать!
AT
Anatolij Trigubenko
76 473
насколько я помню можно так:
public string Field(string FieldName){}
public string Field(int FieldName){}
public string Field(DateTime FieldName){}

но тип возвращаемого значения нельзя менять! разве что использовать шаблоны!
Малик Дыров
Малик Дыров
41 003
в c# нет шаблонов. там есть обобщённые типы и методы, но вам нужны не они, а банальный полиморфизм.
Попробуй либо шаблоны, как сказал Frisian, либо вот так через один метод:
public object Field(string FieldName)
{
if(FieldName == "DateTime")
return this.dateTime;
if(FieldName == "int")
//Ну и т. д.
}

Потом приводишь к требуемому типу:
DateTime time = (DateTime)Field("DateTime");
Fayzullo Shokirov
Fayzullo Shokirov
4 786