【问题标题】:C# How to use one method for two classes with Generic type?C#如何对两个具有通用类型的类使用一种方法?
【发布时间】:2019-05-27 10:35:18
【问题描述】:

我需要将两种不同的打印方法合并为一种。我有两个通用类和我自己的通用列表类。 假设我有

static void Print(string fv, MyListClass<Module> A,
            string top)
 and static void Print2(string fv, MyListClass<Student> A,
            string top)

方法的内部是相同的,但是如何使它们成为一种方法,并且在 Main 类中我在参数中选择要打印的类列表,Module 或者 Student。我的数据在:

MyListClass<Student> Stud; 
MyListClass<Module> Mod;

【问题讨论】:

  • Print&lt;T&gt;(string fv, T A, string top) ?
  • 在这种情况下它找不到我的 MyListClass 方法
  • 好的,那Print&lt;T&gt;(string fv, MyListClass&lt;T&gt; A, string top) 呢?
  • 如果ModuleStudent 不共享任何成员,为什么他们应该有任何通用的方法来处理它们呢?话虽如此,这个泛型适用于 - 好吧 - 常见的一切。如果这里不是这种情况,请不要使用泛型。
  • @LasseVågsætherKarlsen 是的,我已经从你的第一个例子中想到了,谢谢。

标签: c# class generics printing


【解决方案1】:

我有两个 generic 类和我自己的通用列表类。

为什么你有自己的列表类?你一般不应该。假设它实现了IEnumerable&lt;T&gt;

ModuleStudent 使用您要打印的属性实现一个通用接口,例如IPrintable

public interface IPrintable
{
    string Name { get; }
    string Description { get; }
}

public class Module : IPrintable { ... }
public class Student : IPrintable { ... }

现在创建一个带有泛型参数的方法:

void Print<T>(string fv, IEnumerable<T> A, string top)
    where T : IPrintable
{
    foreach (var item in A)
    {
        Console.WriteLine(item.Name + ": " + item.Description);
    }
}

【讨论】:

    【解决方案2】:

    为此,您只需创建一个基类,从中派生 Module 和 Student 类,然后在单个方法的签名中使用该基类。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-02-02
      • 2023-03-17
      • 2016-09-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-12
      相关资源
      最近更新 更多