如何在将对象作为参数传递时解析自定义类型

时间:2015-08-22 15:39:33

标签: c# asp.net

我想从任何程序调用{​​{1}}方法,以匹配基于执行操作时传递的类类型。

所以问题是如何在传递私有方法时解析匿名类型?

我来自:

Create

到我的班级方法:

_productService.Create<Supplier>(_supplier);

2 个答案:

答案 0 :(得分:0)

如何将课程改为:

public class ProductService
{
    public void Create<T>(T obj)
    {
        if (typeof(Supplier) == typeof(T))
            Supplier(obj); //Call Supplier Method;
        else if (typeof(Product) == typeof(Product))
            Product(); //Call Product Method;
        else
            throw new ArgumentOutOfRangeException("Unrecognized type", "type");
    }

    private void Supplier<T>(T s)
    {
        //statements
        Console.WriteLine("Supplier");
    }
    private void Product()
    {
        //statements
        Console.WriteLine("Product");
    }
}

答案 1 :(得分:0)

这看起来像是一个不太理想的泛型用例。您是否考虑过使用简单的方法重载。请尝试以下方法:

public class Program
{
    public static void Main()
    {
        Console.WriteLine("Hello World");
        var service = new ProductService();
        service.Create(new Product());
        service.Create(new Supplier());
        service.Create(new {name="test"});
    }
}


public class ProductService
{
    public void Create(Product obj)
    {
        Product();
    }
    public void Create(Supplier obj)
    {
        Supplier();
    }
    public void Create(Object obj)
    {
        Console.WriteLine("Unknown type called" + obj.GetType().Name);
    }

    private void Supplier()
    {
        Console.WriteLine("Supplier called");
    }
    private void Product()
    {
        Console.WriteLine("Product called");
    }
}
public class Product {}
public class Supplier {}

以上是上面的一个dotnetfiddle:https://dotnetfiddle.net/lzaAba