如果我使用泛型,就像在这个示例中一样,有没有办法缩短语法,所以我不必重复输入“CompanyLookupData”?
Func<CompanyLookupData, CompanyLookupData, bool> DELCompareNonKeyFieldsCompany =
new Func<CompanyLookupData, CompanyLookupData, bool>
(CompanyLookupData.HasIdenticalNonKeyFieldsTo);
我曾尝试Type t = typeof(CopmanyLookupData)
,并在所有地点使用t
,但这似乎不起作用。
PS:虽然我对一个更清晰的方式做了如下所示,但我更感兴趣的是让泛型语法更简洁。
答案 0 :(得分:7)
是的,有几种方法可以实现这一目标:
如果变量是局部变量,您可以使用var
关键字:
var DELCompareNonKeyFieldsCompany = new Func<CompanyLookupData, CompanyLookupData, bool> (CompanyLookupData.HasIdenticalNonKeyFieldsTo);
但是,如果DELCompareNonKeyFieldsCompany
是类变量(字段或属性),您可以让编译器通过从方法组转换为Func
来为您推断其中的一些:
Func<CompanyLookupData, CompanyLookupData, bool> DELCompareNonKeyFieldsCompany = CompanyLookupData.HasIdenticalNonKeyFieldsTo;
如果要经常使用此类型,您可能希望创建自己的委托类型:
public delegate bool CompareCompanyNonKeyFields(CompanyLookupData, CompanyLookupData);
并像这样使用它:
CompareCompanyNonKeyFields DELCompareNonKeyFieldsCompany = CompanyLookupData.HasIdenticalNonKeyFieldsTo;
或者,如果只在一个类中使用该类型,您还可以使用using
关键字为该类型创建别名(尽管我个人认为这会妨碍代码的可读性) :
using CompareCompanyNonKeyFields = System.Func<CompanyLookupData, CompanyLookupData, bool>;
...
CompareCompanyNonKeyFields DELCompareNonKeyFieldsCompany = CompanyLookupData.HasIdenticalNonKeyFieldsTo;
答案 1 :(得分:4)
使用using
语句声明别名:
using MyType = System.Func<CompanyLookupData, CompanyLookupData, bool>;
MyType DELCompareNonKeyFieldsCompany = new MyType(CompanyLookupData.HasIdenticalNonKeyFieldsTo);
答案 2 :(得分:3)
您可以在辅助工厂方法中隐藏它:
void Main() {
var f1 = Helper.Create(CompanyLookupData.HasIdenticalNonKeyFieldsTo);
var f2 = Helper.Create(CompanyLookupData.HasIdenticalNonKeyFieldsTo);
}
static class Helper {
public static Func<T, T, bool> Create<T>(Func<T, T, bool> @delegate) {
return @delegate;
}
}
答案 3 :(得分:2)
你可以使用var来缩短一点:)
var DELCompareNonKeyFieldsCompany = new Func<CompanyLookupData, CompanyLookupData, bool>(CompanyLookupData.HasIdenticalNonKeyFieldsTo);
答案 4 :(得分:2)
我能想到的唯一方法是使用声明。
using cld = MyNamespace.CompanyLookupData;
然后你可以使用cld代替文件其余部分的全名。
答案 5 :(得分:0)
不,你不能从根本上做一些比这更好的事情。无论好坏,C#都没有道德等同于typedef
。
您可能会尝试使用using
别名来缩短类型名称,但我个人认为这不是一个好主意:
using CLD = CompanyLookupData;
Func<CLD, CLD, bool> DELCompareNonKeyFieldsCompany =
new Func<CLD, CLD, bool> (CLD.HasIdenticalNonKeyFieldsTo);
另一种可能性(在实践中不太可能适用)是使用隐式类型变量(var
),如果我们谈论的是本地。