Можно ли вернуть несколько значений с разными типами?
В Javascript я могу сделать функцию, которая возвращает объект:
function person() {
return { name: "John Doe", age: 20, isMarried: false };
}
console.log("Name: "+ person().name +". Age: "+ person().age +". Is married: "+ person().isMarried);
OUTPUT:
> "Name: John Doe. Age: 20. Is Married: false"
Мне было интересно, возможно ли сделать что-то подобное в C#? Я читал о делегатах, словарях и анонимных методах, но до сих пор не имею понятия об этом.
6 ответов
Решение
static void Main(string[] args)
{
dynamic p = person();
Console.WriteLine("Name: {0}, Age: {1}, Is married: {2}", p.name, p.age, p.isMarried);
}
static dynamic person()
{
return new { name = "John Doe", age = 20, isMarried = false };
}
Больше информации о dynamic
ключевое слово
Вы можете вернуть object
:
object Person() {
var p = new ExpandoObject();
p.Name = "John Doe";
p.Age = 20;
p.Married = false;
return p;
}
Вы можете создать еще более динамичный:
object Person() {
return new {
Name = "John Doe",
Age = 20,
Married = false
};
}
Вы также можете вернуть кортеж, который содержит несколько значений.
static void Main(string[] args)
{
var tuple = GetItem()
Console.WriteLine(string.Format("Item1: {0}", tuple.Item1));
Console.WriteLine(string.Format("Item2: {0}", tuple.Item2));
}
public static Tuple<string, int> GetItem()
{
return new Tuple<string, int>("Some item from database.", 4);
}
Вы можете использовать это
public void method(out string Name, out int Age, out bool Married){
//body of method
}
В.NET 4.5 есть нечто, называемое TUPLE. Вы можете использовать это. Для получения дополнительной информации.. Вы можете перейти по ссылке.
http://msdn.microsoft.com/en-us/library/system.tuple(v=vs.110).aspx
class Program
{
static void Main(string[] args)
{
Tuple<int, string, double, string> emp = GetEmployeeInfo();
Console.WriteLine("Emplooyee Id :: " + emp.Item1);
Console.WriteLine("Employee Name :: " + emp.Item2);
Console.WriteLine("Employee Salary :: " + emp.Item3);
Console.WriteLine("Employee Address :: " + emp.Item4);
}
static Tuple<int, string, double, string> GetEmployeeInfo()
{
Tuple<int, string, double, string> employee;
employee = new Tuple<int, string, double, string>(1001, "Uthaiah Bollera", 4500000.677, "Bangalore Karnataka!");
return employee;
}
}