9

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

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

Type t = typeof(CopmanyLookupData)私はすべての場所で使用しようとしましtたが、うまくいかないようです。

PS:私は、示されていることを正確に実行するためのよりクリーンな方法を受け入れていますが、ジェネリック構文をより簡潔にする方法にもっと興味があります。

4

6 に答える 6

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;

または、型が1つのクラス内でのみ使用される場合は、usingキーワードを使用して型のエイリアスを作成することもできます(ただし、個人的には、これによりコードの可読性が低下することがわかります)。

using CompareCompanyNonKeyFields = System.Func<CompanyLookupData, CompanyLookupData, bool>;
...
 CompareCompanyNonKeyFields DELCompareNonKeyFieldsCompany = CompanyLookupData.HasIdenticalNonKeyFieldsTo;
于 2012-07-11T13:03:24.550 に答える
4

ステートメントを使用してusing、エイリアスを宣言します。

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

MyType DELCompareNonKeyFieldsCompany = new MyType(CompanyLookupData.HasIdenticalNonKeyFieldsTo);
于 2012-07-11T13:06:24.907 に答える
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;
    }
}
于 2012-07-11T13:07:47.843 に答える
2

varを使用して、少し短くすることができます:)

var DELCompareNonKeyFieldsCompany = new Func<CompanyLookupData, CompanyLookupData, bool>(CompanyLookupData.HasIdenticalNonKeyFieldsTo); 
于 2012-07-11T13:03:45.020 に答える
2

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

using cld = MyNamespace.CompanyLookupData;

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

于 2012-07-11T13:03:45.093 に答える
0

いいえ、これよりも根本的に良いことはできません。良くも悪くも、C#には道徳的に同等のtypedef

using個人的にはこれは良い考えではないと思いますが、あなたが試みるかもしれないのはタイプ名を短くするためのエイリアスです:

using CLD = CompanyLookupData;

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

もう1つの可能性(実際には適用される可能性ははるかに低い)はvar、ローカルについて話している場合、暗黙的に型付けされた変数()を使用することです。

于 2012-07-11T13:03:15.220 に答える