首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在将对象作为参数传递时解析自定义类型

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

Stack Overflow用户
提问于 2015-08-22 15:39:32
回答 2查看 138关注 0票数 0

我想从任何程序中调用Create方法,以匹配在执行过程操作的基础上传递的类类型。

因此,问题是如何在传递给私有方法时解决匿名类型?

我打电话是从:

代码语言:javascript
复制
_productService.Create<Supplier>(_supplier);

我的课堂教学方法:

代码语言:javascript
复制
public class ProductService
{
    public void Create<T>(T obj)
    {
        switch (obj.GetType().Name)
        {
            case "Supplier":
                Supplier(); //Call Supplier Method;
                break;
            case "Product":
                Product(); //Call Supplier Method;
                break;
            default:
                break;
        }
    }

    private void Supplier<T>(T s)
    {
        //statements
    }

    private void Product()
    {
        //statements
    }
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-08-22 15:54:49

把你的班级改为:

代码语言:javascript
复制
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");
    }
}
票数 0
EN

Stack Overflow用户

发布于 2015-08-22 16:10:46

对于泛型来说,这看起来不是一个理想的用例。您是否考虑过使用简单的方法重载。尝试以下几点:

代码语言:javascript
复制
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 {}

下面是上面所述的点小提琴:https://dotnetfiddle.net/lzaAba

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32157883

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档