2012-07-11 33 views
9

如果我使用泛型,就像这个示例中的情况一样,是否有缩短语法的方法,所以我不必重复键入“CompanyLookupData”?C#在重复使用泛型中的类型时缩短语法?

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

我曾试图做Type t = typeof(CopmanyLookupData),并使用在所有的位置t,但似乎并没有工作。 PS:虽然我开放了一种更清晰的方式来完成所显示的内容,但我更感兴趣的是一种使泛型语法更加简洁的方法。

+0

如何改变CompanyLookupData类型的名称的东西更短。其他任何东西,都会让你的代码不易读 – saj 2012-07-11 13:03:13

+0

我可以,但是我不想每次需要在代理中使用它们时重命名我的类,哈哈。 :) – 2012-07-11 14:10:18

回答

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; 
+0

而不是“场”你可能意味着“财产”? – 2012-07-11 13:23:06

+0

谢谢,我喜欢各种:) – 2012-07-11 14:09:53

0

不,你不能做比这更好的东西。无论好坏,C#都不具备typedef的道德等价物。

什么你可以尝试是using别名缩短类型的名称,但我个人认为这不是一个好主意:

using CLD = CompanyLookupData; 

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

另一种可能性(不太可能是适用于实践)是如果我们正在谈论本地的话,请使用隐式类型变量(var)。

2

您可以使用VAR,送horten有点:)

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

我能想到的唯一方法是使用声明。

using cld = MyNamespace.CompanyLookupData; 

然后,您可以在文件的其余部分使用cld来代替全名。

4

采取using语句声明一个别名:

using MyType = System.Func<CompanyLookupData, CompanyLookupData, bool>; 

MyType DELCompareNonKeyFieldsCompany = new MyType(CompanyLookupData.HasIdenticalNonKeyFieldsTo); 
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; 
    } 
}