C# 在泛型中重复使用类型时缩短语法?

标签 c# .net generics .net-3.5 delegates

如果我使用泛型,就像在这个示例中一样,有没有办法缩短语法,这样我就不必重复键入“CompanyLookupData”?

Func<CompanyLookupData, CompanyLookupData, bool> DELCompareNonKeyFieldsCompany =
    new Func<CompanyLookupData, CompanyLookupData, bool> 
    (CompanyLookupData.HasIdenticalNonKeyFieldsTo);

我曾尝试执行 Type t = typeof(CopmanyLookupData),并在所有位置使用 t,但这似乎不起作用。

PS:虽然我愿意接受一种更简洁的方式来完成所显示的内容,但我更感兴趣的是一种使泛型语法总体上更简洁的方法。

最佳答案

是的,有几种方法可以实现这一点:

如果变量是局部变量,您可以使用 var关键词:

var DELCompareNonKeyFieldsCompany = new Func<CompanyLookupData, CompanyLookupData, bool>   (CompanyLookupData.HasIdenticalNonKeyFieldsTo);

但是,如果DELCompareNonKeyFieldsCompany是一个类变量(字段或属性),您可以让编译器通过将方法组转换为 Func 来为您推断其中的一些变量:

Func<CompanyLookupData, CompanyLookupData, bool> DELCompareNonKeyFieldsCompany = CompanyLookupData.HasIdenticalNonKeyFieldsTo;

如果要经常使用此类型,您可能希望创建自己的委托(delegate)类型:

public delegate bool CompareCompanyNonKeyFields(CompanyLookupData, CompanyLookupData);

然后像这样使用它:

CompareCompanyNonKeyFields DELCompareNonKeyFieldsCompany = CompanyLookupData.HasIdenticalNonKeyFieldsTo;

或者,如果该类型仅在一个类中使用,您还可以使用 using 创建该类型的别名。关键字(尽管我个人认为这会妨碍代码的可读性):

using CompareCompanyNonKeyFields = System.Func<CompanyLookupData, CompanyLookupData, bool>;
...
 CompareCompanyNonKeyFields DELCompareNonKeyFieldsCompany = CompanyLookupData.HasIdenticalNonKeyFieldsTo;

关于C# 在泛型中重复使用类型时缩短语法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11433246/

相关文章:

c# - 为什么 try/finally 而不是 "using"语句有助于避免竞争条件?

c# - Dapper,避免 "The connectionstring property has not been initialized"错误

c# - 如何警告由于类型转换导致的潜在算术错误?

java - 通用方法语法 <Type>method()

ios - swift 中奇怪的泛型行为

.net - 列表泛型 - 隐式转换

c# - Observable.FromEvent 和 CreateDelegate 参数映射

c# - 带有两侧的 WPF 按钮

c# - 解析和过滤 javascript 数组

c# - 使用 IPAddress 列序列化 DataTable