从IEnumerable <product>转换为IEnumerable <iproduct <object >>

时间:2018-08-17 23:37:07

标签: c# linq

我有一个IEnumerable<Product>类型的对象

// var objEnum is of type IEnumerable<Product>

我有一个参数为IEnumerable<IProduct<object>>的函数

void MethodName (IEnumerable<IProduct<object>> obj) { return; } 

我要调用该函数:

MethodName( objEnum ) 

但是似乎我需要以某种方式将objEnum强制转换为IEnumerable<IProduct<object>>,我是否需要强制转换?这可能吗?我可以将哪些方法应用于objEnum才能正确通过?

如果NotProduct是

定义的另一种类型
class NotProduct 
{
}

和IProduct由

定义
interface IProduct<T> 
{ 
    void IProductMethod(T obj);
}

我的产品类定义如下:

class Product : IProduct<NotProduct>
{ 
    void IProductMethod(NotProduct obj) { return;}
}

我使用我的方法如下:

IEnumerable<Product> productList = new List<Product>(); 
MethodName(productList);
// return nothing, do nothing, just don't throw an exception

编辑:完整代码

using System;

using System.Collections.Generic;



namespace ConsoleApp1

{

    class Program

    {

        static void Main(string[] args)

        {

            Console.WriteLine("Hello World!");



            IEnumerable<Product> productList = new List<Product>();

            NotProduct notProduct = new NotProduct();

            MyMethods.MethodName(productList, notProduct);



            IEnumerable<AnotherProduct> anotherProductList = new List<AnotherProduct>();

            NotAnotherProduct notAnotherProduct = new NotAnotherProduct();

            MyMethods.MethodName(anotherProductList, notAnotherProduct);



            System.Diagnostics.Debug.WriteLine("Program ran sucessfully");

        }



    }



    public static class MyMethods

    {

        public static void MethodName(IEnumerable<IProduct<object>> collection, object obj)

        {

            foreach (IProduct<object> aProduct in collection)

            {

                if (obj is NotProduct && aProduct is IProduct<NotProduct>)

                {

                    aProduct.IProductMethod(obj);

                }

                else if (obj is NotAnotherProduct && aProduct is IProduct<NotAnotherProduct>)

                {

                    aProduct.IProductMethod(obj);

                }

            }

        }



    }



    public interface IProduct<T>

    {

        void IProductMethod(T t);

    }



    public class NotAnotherProduct

    {



    }



    public class AnotherProduct : IProduct<NotAnotherProduct>

    {

        public void IProductMethod(NotAnotherProduct t)

        {

            return;

        }

    }



    public class NotProduct

    {

    }



    public class Product : IProduct<NotProduct>

    {

        public void IProductMethod(NotProduct t)

        {

            return;

        }

    }

}

0 个答案:

没有答案