我正在努力在课堂上完成以下任务:
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)
{
.....
}
编辑:当我更多地想到这一点时,我明白这不是我问题的答案。我发布了一个有更多想法背后的新问题。我不会删除这个问题,因为其他人可能会觉得这个有用。
答案 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);
}