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

Joh*_*0te 9 .net c# generics delegates .net-3.5

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

Func<CompanyLookupData, CompanyLookupData, bool> DELCompareNonKeyFieldsCompany =
    new Func<CompanyLookupData, CompanyLookupData, bool> 
    (CompanyLookupData.HasIdenticalNonKeyFieldsTo);
Run Code Online (Sandbox Code Playgroud)

我试图这样做Type t = typeof(CopmanyLookupData),并t在所有位置使用,但这似乎不起作用.

PS:虽然我愿意采用更清晰的方式来完成所显示的内容,但我更感兴趣的是一种使泛型语法更简洁的方法.

Ric*_*lly 7

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

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

var DELCompareNonKeyFieldsCompany = new Func<CompanyLookupData, CompanyLookupData, bool>   (CompanyLookupData.HasIdenticalNonKeyFieldsTo);
Run Code Online (Sandbox Code Playgroud)

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

Func<CompanyLookupData, CompanyLookupData, bool> DELCompareNonKeyFieldsCompany = CompanyLookupData.HasIdenticalNonKeyFieldsTo;
Run Code Online (Sandbox Code Playgroud)

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

public delegate bool CompareCompanyNonKeyFields(CompanyLookupData, CompanyLookupData);
Run Code Online (Sandbox Code Playgroud)

并像这样使用它:

CompareCompanyNonKeyFields DELCompareNonKeyFieldsCompany = CompanyLookupData.HasIdenticalNonKeyFieldsTo;
Run Code Online (Sandbox Code Playgroud)

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

using CompareCompanyNonKeyFields = System.Func<CompanyLookupData, CompanyLookupData, bool>;
...
 CompareCompanyNonKeyFields DELCompareNonKeyFieldsCompany = CompanyLookupData.HasIdenticalNonKeyFieldsTo;
Run Code Online (Sandbox Code Playgroud)