2

我正在尝试在课堂上完成以下任务:

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

4 回答 4

8

只需传递object并调用ToString()它:

public void Test(object input)
{
    WriteToFile(input.ToString());
}
于 2013-07-03T11:09:06.200 回答
6
public void Test<T>(T input)
{
    WriteToFile(Convert.ToString(input));
}
于 2013-07-03T11:10:52.670 回答
3

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

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

于 2013-07-03T11:11:13.233 回答
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...
      }
}

更好的实现方式是使用“is”运算符。

      if (input is string)
      {
            res = input.ToString();
            WriteToFile(res);
      }
于 2013-07-03T11:11:15.143 回答