类中所有值类型的常规函数

时间:2013-07-03 11:07:20

标签: c# .net winforms

我正在努力在课堂上完成以下任务:

public void Test(var input)
{
    WriteToFile(input.ToString());
}

private void WriteToFile(string input)
{
    .....
}

但是'var'语句不能在类中使用。所以我想知道最简单的方法是如何完成与上面相同的事情。

一种解决方案是为每种值类型创建一个函数,但这必须比必要的更麻烦:

public void Test(string input)
{
    WriteToFile(input);
}

public void Test(int input)
{
    WriteToFile(input.ToString());
}

public void Test(double input)
{
    WriteToFile(input.ToString());
}

private void WriteToFile(string input)
{
    .....
}

编辑:当我更多地想到这一点时,我明白这不是我问题的答案。我发布了一个有更多想法背后的新问题。我不会删除这个问题,因为其他人可能会觉得这个有用。

4 个答案:

答案 0 :(得分:8)

只需传递object并在其上调用ToString()

public void Test(object input)
{
    WriteToFile(input.ToString());
}

答案 1 :(得分:6)

public void Test<T>(T input)
{
    WriteToFile(Convert.ToString(input));
}

答案 2 :(得分:3)

您可以尝试使用     public void Test(object input)

并且可能在调用tostring方法之前测试(输入!= null)

答案 3 :(得分:0)

使函数Test接受一个对象参数,并在确定其中的类型后继续。

public void Test(object input)
{
      var res = (dynamic)null;
      if (input.GetType() == typeof(String)))
      {
            res = input.ToString();
            WriteToFile(res);
      }
}

编辑:为什么这种方法?

将来,如果您需要将支持扩展到其他类型,您可以执行以下操作(因为问题涉及float,double,long,int ......)

public void Test(object input)
{
      var res = (dynamic)null;
      if (input.GetType() == typeof(String)))
      {
            res = input.ToString();
            WriteToFile(res);
      }
      if (input.GetType() == typeof(float)))
      {
           //do some other operations here...
      }
}

更好的实现方法是使用&#34;是&#34;操作

      if (input is string)
      {
            res = input.ToString();
            WriteToFile(res);
      }