从同一方法返回string和int

时间:2017-04-14 06:45:04

标签: c#

public static int getInfo(string info)
    {
        string inputValue;
        int infor;
        Console.WriteLine("Information of the employee: {0}", info);
        inputValue = Console.ReadLine();
        infor = int.Parse(inputValue);
        return infor;

    }

在上面的代码中,我如何获得一个人的姓名(字符串)和工资(int)?规范是我需要两次调用该方法进行信息检索。

6 个答案:

答案 0 :(得分:5)

如果您创建一个包含信息和工资的类

,您可以单独或更好地传递它
debounce

或创建一个类,

 public static int getInfo(string info,int salary)

,方法签名为

 public class MyInfo
    {
        public int info { get; set; }
        public int salary { get; set; }

    }

如果要返回string和int,最好更改方法签名类型类 public static int getInfo(MyInfo info)

MyInfo

答案 1 :(得分:1)

你可以让它返回一个包含这两个值的元组:

internal Tuple<int, string> GetBoth(string info)
{
    string inputValue;
    int infor;
    Console.WriteLine("Information of the employee: {0}", info);
    inputValue = Console.ReadLine();
    infor = int.Parse(inputValue);
    return new Tuple<int, string>( infor, inputValue );
}

internal void MethodImCallingItFrom()
{
    var result = GetBoth( "something" );
    int theInt = result.Item1;
    string theString = result.Item2;
}

答案 2 :(得分:0)

public static void Main(string[] args)
    {
        string eName, totalSales;
        double gPay, tots, fed, sec, ret, tdec,thome;
        instructions();
        eName = getInfo("Name");
        totalSales = getInfo("TotalSales");
        tots = double.Parse(totalSales);
        gPay = totalGpay(tots);

}

public static string getInfo(string info)
    {
        string inputValue;
        Console.WriteLine("Information of the employee: {0}", info);
        inputValue = Console.ReadLine();

        return inputValue;

    }

这就是所需要的。可以用你们提到的其他技巧完成。无论如何,谢谢你。

答案 3 :(得分:-1)

为什么不返回大小为2的String数组?在第一个(数组[0])有字符串,在第二个(数组[0])有int ...

public static string[] GetInfo (string info)

我希望我理解你的问题^^

答案 4 :(得分:-1)

你需要创建一个人类并阅读姓名和工资

public class Person
{
    public string Name {get; set;}
    public decimal Salary {get; set;}
}

你的职能是:

public static Person getInfo(string info)
{
    string inputName;
    string inputSalary;

    Console.WriteLine("Information of the employee: {0}", info);

    Console.WriteLine("Name:");
    inputName = Console.ReadLine();

    Console.WriteLine("Salary:");
    inputSalary = Console.ReadLine();

    Person person = new Person();
    person.Name = inputName;
    person.Salary = int.Parse(inputSalary);
    return person;

}

答案 5 :(得分:-1)

如果你想要一种方法返回不同类型的信息,那么我会使用泛型:

public static T GetInfo<T>(string name);

// This can be called as following:
string name = GetInfo<string>("name");
int salary = GetInfo<int>("salary");

但是有一个问题:Console.ReadLine返回string,而我们的方法可以返回任何类型。如何将字符串转换为其目标&#39;类型?您可以检查T并为您要支持的所有类型编写自定义逻辑,但这很麻烦且很脆弱。更好的解决方案是让调用者传入一个知道如何将字符串转换为特定类型的小函数:

public static T GetInfo<T>(string name, Func<string, T> convert);

// This can be called as following:
string name = GetInfo<string>("name", s => s);
int salary = GetInfo<int>("salary", int.Parse);

现在你如何实现该方法?

public static T GetInfo<T>(string name, Func<string, T> convert)
{
    Console.WriteLine("Please enter " + name);
    string input = Console.ReadLine();
    return convert(input);
}

一些注意事项:

  • 类型参数通常只是名为T,但我发现为它们提供更具描述性的名称很有用,例如TInfo
  • 第二个示例中可省略<string><int>部分,因为编译器有足够的信息来推断其类型。
  • 我已经离开了我们的错误处理,以保持示例简洁明了。在生产代码中,您将想要提出一种处理无效输入的策略。