【问题标题】:How to Accept Generics Argument of Any Type?如何接受任何类型的泛型参数?
【发布时间】:2013-02-24 19:13:14
【问题描述】:

假设我有一个泛型类。

public class PagerInfo<T>
{
    // ...
}

我想将这个类的一个实例传递给另一个类中的方法。

public void Pagination(PagerInfo pagerInfo)
{
    // ...
}

上面的方法无法编译,因为我没有提供类型参数。但是,如果我希望这种方法不管类型如何都可以工作。也就是说,无论类型如何,我都希望此方法对 PagerInfo 实例进行操作。而且我的方法不会访问任何特定于类型的方法或属性。

另外,请注意我的实际方法是在 ASP.NET MVC cshtml 辅助方法中,而不是常规 cs 文件中。

【问题讨论】:

  • public void Pagination&lt;T&gt;(PagerInfo&lt;T&gt; pagerInfo)?
  • 你知道,我认为你是对的。我猜它不起作用,因为它位于 cshtml 文件中,并且 @helper Pagination&lt;T&gt;(string url, PagerInfo&lt;T&gt; pagerInfo) 失败并出现错误 Expected a "(" after the helper name.
  • IC - 不知道该怎么做。那么剃须刀的问题。见stackoverflow.com/questions/4760783/…

标签: c# generics


【解决方案1】:

如果该方法不访问使用泛型类型参数的类型成员,则通常定义一个非泛型基类型,泛型类型从该基类型派生:

public abstract class PagerInfo
{
    // Non-generic members
}

public class PagerInfo<T> : PagerInfo
{
    // Generic members
}
public void Pagination(PagerInfo pagerInfo)
{
    // ...
}

【讨论】:

  • 一个接口可能会更好,因为它仍然允许类PagerInfo&lt;T&gt; 在需要时从另一个类继承。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多