1

たとえば、次のクラスがあります。

public class PublishFacebookOpenGraphActionRequest
{
    public FacebookOpenGraphActions Action { get; private set; }
    public FacebookOpenGraphObjects ObjectType { get; private set; }
    public Uri Url { get; private set; }
    public Uri Image { get; private set; }
}

そして、現在のプロパティのセットから次のようなものを生成できるようにしたいと思います。

public class PublishFacebookOpenGraphAction
{
    public FacebookOpenGraphActions Action { get; private set; }
    public FacebookOpenGraphObjects ObjectType { get; private set; }
    public Uri Url { get; private set; }
    public Uri Image { get; private set; }

    public PublishFacebookOpenGraphAction WithAction(FacebookOpenGraphActions action)
    {
        this.Action = action;
        return this;
    }

    public PublishFacebookOpenGraphAction WithObjectType(FacebookOpenGraphObjects objectType)
    {
        this.ObjectType = objectType;
        return this;
    }

    public PublishFacebookOpenGraphAction WithUrl(Uri url)
    {
        this.Url = url;
        return this;
    }

    public PublishFacebookOpenGraphAction WithImage(Uri image)
    {
        this.Image = image;
        return this;
    }
}
4

2 に答える 2

3

PublishFacebookOpenGraphActionRequestのすべてのメンバーから流暢なインターフェースへの変換はありません。
しかし、流暢なプロパティの半分自動化された生成-WithMember-pairも小さな前進です。これは、ReSharperLiveTemplateで可能です。

私は例を持っています:

ここに画像の説明を入力してください

そのライブテンプレートを使用して次のコードを作成できます。

public FacebookOpenGraphActions Action { get; private set; }

public PublishFacebookOpenGraphAction WithAction(FacebookOpenGraphActions action)
{
    this.Action = action;
    return this;
}

fluentProp+ ENTERと入力し、プロパティ名とそのタイプを入力するだけです。

于 2012-05-29T16:37:59.043 に答える
2

もう1つの方法は、正規表現を使用してVisual Studioクイック置換Ctrl + H)を使用することです。 スクリーンショットを参照してください:

ここに画像の説明を入力してください

何に設定されているかを検索:b*public:b+{:i}:b+{:i}:b+\{:b*get;:b*private:b*set;:b*\}:b*$します。
置換:に設定されます:public \1 \2 { get; private set; }\n public _class_ With\2(\1 p\2)\n\{\nthis\.\2 = p\2;\nreturn this;\n\}\n

これにより、現在のドキュメントのすべてのプロパティに*With**メンバーが追加されます。残念ながら、*With**メンバーの返品タイプを設定する方法が見つかりません。だから私はそれをに設定しました_class_。したがって、これをクラス名に置き換える必要があります_class_(手動または別のクイック置換実行)。

于 2012-05-30T09:02:59.857 に答える