【问题标题】:How to pass by reference different kinds of list end receive as a generic list as parameter C#如何通过引用传递不同类型的列表结束接收作为参数C#的通用列表
【发布时间】:2018-12-22 00:00:55
【问题描述】:

我想通过引用发送不同类型的列表,并作为工具功能的一般接收。之后,进行向下转换并恢复原始类型。但它没有醒来。有人有解决方案来完成这项工作吗?

  public Class A{
    ...
    List<A> A_List= readAList();
    saveToExcelTables(A_List,"A")
    ...
    }

    public Class B{
    ...
    List<B> B_List= readBList();
    saveToExcelTables(B_List,"B")
    ...
    }

    public Class Tools{

       public static void saveTableToExcel(List<T> obj,string typeTyoe){

          if(tableType == "A")
            {
                List<A> A_List= (A) obj;
            }
          if(tableType == "B")
            {
                List<B> B_List= (B) obj;
            }
    }

【问题讨论】:

  • 为什么用 Java 标记?
  • 似乎是对泛型的滥用。事实上,泛型适用于 any 类型,而不仅仅是 AB。那么当有人决定用List&lt;C&gt; 调用你的方法时,你会怎么做呢?甚至是匿名类型?在这种情况下,SafeTableTopExcel 无能为力。所以不要假装你可以传递任何类型,而实际上你只需要几个。话虽如此,您应该为不同的类型编写不同的方法,或者依赖所有类型实现的通用接口。
  • 你想对这些列表做什么?
  • 在我的情况下,我将只有 5 种类型,我将不得不传递给这个函数,但我希望这个方法接收这些列表并识别从哪里(A 类,B 类,类C ...)它来自。除此之外,我有一个已经可以使用的代码,它采用这个列表并保存在 Excel 表中

标签: java c# object


【解决方案1】:

你可以用 AS 操作符来做:

C# reference AS operator

public class Tools
{

    public static void saveToExcelTables<T>(List<T> obj, string tableType)
    {

        if (tableType == "A")
        {
            List<A> A_List = obj as List<A>;
        }
        if (tableType == "B")
        {
            List<B> B_List = obj as List<B>;
        }
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-01
    • 2021-08-15
    • 2018-06-29
    • 1970-01-01
    • 1970-01-01
    • 2021-08-21
    • 1970-01-01
    • 2014-10-13
    相关资源
    最近更新 更多