【问题标题】:What does T stands for in C#? [duplicate]C# 中的 T 代表什么? [复制]
【发布时间】:2014-02-14 18:56:50
【问题描述】:
public void DisplayValue<T>(T field, string fieldname)

上面代码中的T代表什么?

这样做有什么好处?

我们可以在哪里使用它?

【问题讨论】:

  • 这么多重复...必须尽快关闭。
  • 真正出自 Delphi 之父 (Anders Hejlsberg) 之手,他也是 C# 语言开发团队的首席架构师。在 Delphi 中,我们使用 T 来指定它是一种类型,例如 TClient 等。Anders 在 C# 泛型中应用它是有道理的。我只是希望您至少给泛型类型提供一些有意义的名称,而不仅仅是 T,而是例如 TCommand。

标签: c# generics


【解决方案1】:

来自Generics (C# Programming Guide)

...通过使用泛型类型参数 T,您可以编写单个类 其他客户端代码可以使用而不会产生成本或风险 运行时强制转换或装箱操作

【讨论】:

    【解决方案2】:

    它是一个泛型类型参数。

    泛型类型参数允许您在编译时为方法指定任意类型 T,而无需在方法或类声明中指定具体类型。

    例如:

    public T[] Reverse<T>(T[] array)
    {
        var result = new T[array.Length];
        j=0;
        for(int i=array.Length; i>= 0; i--)
        {
            result[j] = array[i];
            j++;
        }
        return result;
    }
    

    反转数组中的元素。这里的关键是数组元素可以是任何类型,并且函数仍然可以工作。您在方法调用中指定类型;类型安全仍然得到保证。

    所以,要反转一个字符串数组:

    string[] array = new string[] { "1", "2", "3", "4", "5" };
    var result = reverse(array);Will produce a string array in result of { "5", "4", "3", "2", "1" }
    

    这与调用普通(非泛型)方法的效果相同,如下所示:

    public string[] Reverse(string[] array)
    {
        var result = new string[array.Length];
        j=0;
        for(int i=array.Length; i >= 0; i--)
        {
            result[j] = array[i];
            j++;
        }
        return result;
    

    }编译器看到该数组包含字符串,所以它返回一个字符串数组。类型字符串替换了 T 类型参数。


    泛型类型参数也可用于创建泛型类。

    在您给出的 SampleCollection 示例中,T 是任意类型的占位符;这意味着 SampleCollection 可以表示对象的集合,您在创建集合时指定其类型。

    所以:

    var collection = new SampleCollection&lt;string&gt;();

    创建一个可以保存字符串的集合。上面说明的 Reverse 方法以一种不同的形式,可用于反转集合的成员。

    【讨论】:

    • 在方法名称中包含 T 的重要性是什么?例如“反向
    • 表示是泛型方法..
    • 阅读此答案的第一句话,我想知道这是否意味着在编译时替换了与此泛型方法一起使用的所有类型,然后该方法实际上存在于编译代码中的每个类型版本中?跨度>
    【解决方案3】:

    类型参数 T:列表中元素的类型。

    根据MSDN 文档。

    这样做有什么好处?

    该方法可以采用一种类型的匿名列表。

    我们可以在哪里使用它?

    例如,当必须对多种类型的多个列表进行相同的操作时。

    【讨论】:

      猜你喜欢
      • 2016-05-27
      • 1970-01-01
      • 2011-01-09
      • 2018-04-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-05
      • 2020-06-20
      相关资源
      最近更新 更多