【问题标题】:Generic function return List C#泛型函数返回列表 C#
【发布时间】:2016-08-29 02:55:47
【问题描述】:

我是 C# 新手,现在正在阅读有关泛型函数的信息。但我无法理解出了什么问题?例如,我有这个功能:

public List<T> CutText (List<T> list)
{
      foreach (var a in list)
      {
                a.Text = "Yes";
      }

      return list;
}

【问题讨论】:

  • 您是否阅读了错误信息?你认为T 是什么?
  • 阅读此链接以供参考:How to return a generic list collection in C#?。基本上你不能使用泛型函数参数和返回类型,你需要声明一个自定义类并使用它,或者使用字符串列表。如果你愿意,我可以举一些例子作为答案。,
  • 找不到名称 T
  • 如果你的函数是通用的,你怎么能假设所有传递的对象都具有Text属性?如果是int的列表呢?

标签: c#


【解决方案1】:
  1. 你的函数不是通用的。这只是一个无效的不可编译函数,它返回一个未知类型 T 的列表。您的函数或您的类在其声明中也应该有 &lt;T&gt; 以使其具有通用性。

    例如,像这样:

    public List<T> CutText<T>(List<T> list)
    {
        foreach (var a in list)
        {
          a.Text = "Yes";
        }
    
        return list;
    }
    
  2. 即使您将其标记为泛型,现在类型 T 也没有 Text 属性,直到 T 由具有 Text 属性的类或接口更精确地指定:

    public List<T> CutText<T>(List<T> list) where T : TextBox
    

    public List<T> CutText<T>(List<T> list) where T : IAnyInterfaceHavingTextProperty
    

【讨论】:

  • 出于好奇,为什么要投反对票?这是正确的答案。
【解决方案2】:

Text 属性是什么?您需要定义一个约束,以便泛型知道会发生什么。例如,ITextControl interface 是 webforms 框架中的一个接口,如果你像下面这样定义它,你的代码就可以工作。

public List<T> CutText<T>(List<T> list)
   where T: ITextControl

但是你必须定义一个泛型可以理解的地方。否则,它不能像上面那样是强类型代码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-05
    • 1970-01-01
    • 1970-01-01
    • 2018-01-27
    • 2014-05-16
    • 2017-11-22
    • 2022-01-07
    相关资源
    最近更新 更多