根据C#中的输入类型提供不同的格式

时间:2015-05-17 02:04:18

标签: c#

我试图根据其类型输出值。目前我正在根据T的类型创建一堆if语句。是否有更好的解决方案使代码看起来更简洁?

    public static void Output<T>(T data)
    {
        string dataStr = data.ToString();

        if (typeof (T) == typeof(double))
        {
            dataStr = String.Format("{0:N4}", data);
        }

        Console.WriteLine(dataStr):
    }

3 个答案:

答案 0 :(得分:3)

唯一的选择是避免泛型并根据类型提供显式方法重载:

public static void Output(Double data) { Console.WriteLine( "{0:N4}", data ); }
public static void Output(String data) { Console.WriteLine(    "{0}", data ); }
public static void Output(Int32 data)  { Console.WriteLine(  "{0:G}", data ); }
// ...and so on

注意这种方法的缺点是过载选择是在编译时完成的,而不是运行时,所以这会失败:Output( (Object)someInt32Value );

答案 1 :(得分:0)

它的击球选项是重载

<强>多形性:

当消息可以以不同方式处理时称为多态。多态性意味着多种形式。

多态性是OOP的基本概念之一。

多态性提供以下功能:

它允许您在运行时通过基类引用调用派生类的方法。 它具有使类能够提供通过相同名称调用的方法的不同实现的能力。

多态性有两种类型:

编译时间多态/重载 运行时多态性/覆盖

编译时间多态性

编译时多态是方法和运算符重载。它也被称为早期绑定。

在方法重载方法中,在不同的输入参数下执行不同的任务。

运行时多态性

运行时多态性是使用继承和虚函数完成的。方法重写称为运行时多态。它也被称为后期绑定。

覆盖方法时,可以更改派生类的方法行为。重载方法只需要使用相同原型的另一种方法。

警告:不要使用方法覆盖来混淆方法重载,它们是不同的,无关的概念。但它们听起来很相似。

方法重载与继承或虚方法无关。

1. More info click here, 2. More info click here

using System;

class Test
{
    static void Foo(int x, int y)
    {
        Console.WriteLine("Foo(int x, int y)");
    }

    static void Foo(int x, double y)
    {
        Console.WriteLine("Foo(int x, double y)");
    }

    static void Foo(double x, int y)
    {
        Console.WriteLine("Foo(double x, int y)");
    }

    static void Main()
    {
        Foo(5, 10);
    }
}

答案 2 :(得分:0)

一种替代方法是维护一个与Types匹配的字典来格式化字符串。

代码对于一个项目来说有点愚蠢,但是任何需要处理的其他类型只需要字典中的额外行:

public static void Output<T>(T data)
{
  var formats = new Dictionary<Type, string>
  {
    {typeof (Double), "{0:N4}"}
  };

  var format = formats.Where(x => x.Key == typeof(T))
                      .Select(x => x.Value).SingleOrDefault();

  string dataStr = data.ToString();

  if (format != null)
    dataStr = String.Format(format, data);

  Console.WriteLine(dataStr);
}

给予应有的信用,a similar question with a similar response

相关问题