【问题标题】:Get type inside those sharp brackets [duplicate]在那些尖括号内输入类型[重复]
【发布时间】:2017-11-07 16:12:16
【问题描述】:

嗯,这可能是重复的,但我不知道它们叫什么,所以我不知道要搜索什么..

我有一个加密字符串并返回字节数组 (byte[]) 的函数。 现在,如果需要,我希望相同的函数返回一个字符串,并且在其他地方我使用了那些尖括号来告诉函数输出应该是什么。
喜欢。

Security.Encrypt(data, "password") : returns byte[]
Security.Encrypt<string>(data, "password") : returns string

现在我完全误解了那些尖括号的用法吗? 他们叫什么? (然后我也许可以自己谷歌它) 我如何访问这个eehm。我的函数中的修饰符-thingey?

【问题讨论】:

  • 它被称为泛型方法。只是谷歌它,有大量的例子:) => dotnetperls.com/generic-method
  • 它们的“尖括号”与泛型一起使用。这是谷歌的第一个术语,泛型。我不熟悉您正在使用的方法,但是您需要创建通用方法,您不能只是在上面贴一些“尖括号”并期望它起作用。
  • 如果您有空闲时间,请为自己准备一本 C# 方面的好书。一本好书应该解释这个和许多其他有用的技术。我自己很喜欢 Jon Skeet 的“C# in Depth”。
  • 其实,如果你只想控制返回类型,泛型并不是最好的选择,imo。我建议您最好使用两种方法byte[] EncryptToByteArray(..)string EncryptToString(..)

标签: c#


【解决方案1】:

尖括号称为泛型。

我认为这不是泛型的正确用法,因为您的方法只能返回字节数组或字符串。当您的方法适用于接口的所有类型或所有实现类型时,应使用泛型。 System.Collections.Generic.List&lt;T&gt; 就是这样一个例子,你可以创建一个列表来存储任何类型的对象,所以这是对泛型的适当使用。

请尝试将它们设为两个单独的方法 - EncryptToStringEncryptToByteArraySystem.Convert 类中的方法也可以做到这一点,因为您只能在 Int32Int16Boolean 等内容之间进行转换,它公开了单独的方法来转换为每种类型。

为了完整起见,我将向您展示如何获取泛型参数类型。

你的方法会这样声明:

public T Encrypt<T>(string data, string password) {

}

现在T是用户输入的类型,可以这样查看

if (typeof(T) == typeof(string))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-04-05
    • 1970-01-01
    • 2017-08-19
    • 1970-01-01
    • 2011-12-13
    • 1970-01-01
    • 2021-01-13
    • 1970-01-01
    相关资源
    最近更新 更多