2012-07-11 6 views
9

このサンプルの場合のように、ジェネリックを使用している場合、構文を短縮して「CompanyLookupData」を繰り返し入力する必要はありませんか?C#ジェネリックの型を繰り返し使用すると構文が短くなりますか?

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

私はType t = typeof(CopmanyLookupData)を行い、場所のすべてでtを使用しようとしたが、それは動作するように表示されません。

PS:表示されている内容を正確に実行する方法がわかりましたが、ジェネリックスの構文を一般的に簡潔にする方法にもっと興味があります。

+0

方法。他のものは、あなたのコードを読みにくくするでしょう。 – saj

+0

私は、私がクラスの名前を代理人で使う必要があるたびに、名前を変更したくありません。 :) –

答えて

7

はい、これを達成するためのいくつかの方法があります。

変数は、varキーワードに使用できるローカル変数の場合:DELCompareNonKeyFieldsCompanyはクラス変数である場合、しかし、

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

を(aはフィールドまたはプロパティ)を使用すると、コンパイラはFuncにメソッドグループから変換することにより、あなたのためにそれのいくつかを推測させることができます:

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

このタイプは、頻繁に使用する場合は、あなたがあなた自身のデリゲート型を作成することを望むかもしれない:

public delegate bool CompareCompanyNonKeyFields(CompanyLookupData, CompanyLookupData); 

をそしてそうのようにそれを使用する:タイプのみ内で使用される

CompareCompanyNonKeyFields DELCompareNonKeyFieldsCompany = CompanyLookupData.HasIdenticalNonKeyFieldsTo; 

また場合あなたは秒に、VARを使用することができます

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

"フィールド"の代わりにおそらく "プロパティ"を意味するのでしょうか? –

+0

ありがとう、私は多様が好きです:) –

0

いいえ、基本的にこれ以上のことはできません。 C#には、より良いまたは悪い場合には、道徳的に同等のtypedefがありません。

個人的に私は、これは良いアイデアではないと考えているが、何を試みる場合がありますが、タイプ名を短くするusing別名である:

using CLD = CompanyLookupData; 

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

別の可能性としては、(はるかに少ない可能性が実際に適用されるように)でありローカルについて話している場合は、暗黙的に型指定された変数(var)を使用してください。

2

:1クラスでは、あなたもusingキーワード(個人的に、私はこれは、コードの読みやすさを妨げることを見つける、が)を持つタイプにエイリアスを作成することができます少しホーテン:

2

私が考えることができる唯一の方法は、使用宣言です。

次に、残りのファイルにフルネームの代わりにcldを使用できます。

4

は別名を宣言するusing声明を取る:

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

MyType DELCompareNonKeyFieldsCompany = new MyType(CompanyLookupData.HasIdenticalNonKeyFieldsTo); 
3

あなたはヘルパーファクトリメソッドでそれを隠すことができます短い何かにCompanyLookupDataタイプの名前の変更について

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; 
    } 
} 
関連する問題