我正在编写一个类型参数为T
的类,它接受一个将T
实例转换为字符串的委托。我可以将此类委托的类型声明为Func<T, string>
或Converter<T, string>
。任何理由我都应该选择其中一个?
答案 0 :(得分:5)
除了名称之外,代理定义在所有内容中都是相同的。因此,这可以提供的唯一实际值是防止不必要的分配尝试从输入委托类型转换为您选择的类型。简而言之,如果所有输入代理都是Func
,则选择Converter
会导致分配开销(反之亦然)
总的来说,这只是一个风格决定。我发现大多数新API都倾向于使用Func
和Action
而不是其他命名委托,因此我会使用它。
答案 1 :(得分:1)
我认为您应该使用Converter,因为这是您的课程所需要的:转换器。
当然,你可以使用Func,但是Func会完成转换器的工作,所以如果你使用转换器你的意图会更清楚
答案 2 :(得分:0)
似乎这个问题一直是asked before。
根据Converter和Func的文档,定义是等价的,所以我想说这是一个偏好问题。
我个人会选择转换器,主要是因为它让你的意图更加清晰(不仅仅是“传递给我一个代表”,而是“给我一个将转换某事的代表”。
但是,如果它只是将任意对象转换为字符串,那么.NET框架已经提供了一种机制:它被称为.ToString
,任何对象都应该有一个合理的实现。
答案 3 :(得分:0)
Converter
的文档将其描述为两个ConvertAll
方法使用的文档。
说明
ConvertAll<TInput, TOutput>
类的Array
方法和ConvertAll<TOutput>
类的List<T>
方法使用此委托将集合的每个元素从一个类型转换为另一个。
我只会将它用于此目的。出于任何其他目的,我会使用Func
。