CustomAttributeをすべてのオブジェクトプロパティに動的に追加するにはどうすればよいですか?

ティクロズ

私はこのような複数のプロパティを持つオブジェクトを持っています:

public int num1 { get; set; }

public int num2 { get; set; }

public string str1 { get; set; }

public string str2 { get; set; }

これらのプロパティは動的に生成されるクラス内にあるため、プロパティ上のすべてのCustomAttributesが消去されます。

追加してみました

[Submit]
MyClass myObject

しかし、それは私のオブジェクトのプロパティには広がりませんでした

C#内で動的にそれを行う方法はありますか?

ボンドリン

あなたの質問を理解するのに少し苦労していますが、明確にしようと思います。

複数の属性を持つオブジェクトがあります...すべてのCustomAttributesが消去されます

C#の用語では、この形式のクラスメンバーは、<access> <type> <name> { get; set; }「属性」ではなく「プロパティ」と呼ばれます。一方、「属性」は、参照しているカスタム属性など、アノテーションのC#実装です。

とはいえ、現在、複数のプロパティを持つ自動生成されたクラスがあることを意味していると理解しています。これらの各プロパティに独自のカスタム属性を持たせたいのですが、クラスを編集すると、次に生成されるときに削除され、クラスジェネレータにカスタム属性を含めることはできません。

クラスのコンテキストをもっと知ることが役立つかもしれません。たとえば、どのように生成されますか?それがEntityFrameworkクラスである場合、次のSO質問はいくつかの洞察を提供する可能性がありますエンティティフレームワークによって生成されたクラスにデータ注釈を追加します一般に、生成されたクラスは(または作成できますか)partialですか?もしそうなら、あなたはまだ上記の質問の答えのアプローチに従うことができます、すなわち。プロパティのカスタム属性を提供する独自の部分クラス実装を作成します。

たとえば、生成されたクラスが次のように見える(または見えるようにすることができる)場合:

/// <auto-generated />
public partial class MyClass
{
    public int Num1 { get; set; }

    public int Num2 { get; set; }

    public string Str1 { get; set; }

    public string Str2 { get; set; }
}

次のように、カスタムアノテーションを使用して部分クラスの他の部分を記述できます。

/// human generated
public partial class MyClass
{
    [Submit]
    public int Num1 { get; set; }

    [Submit]
    public int Num2 { get; set; }

    [Submit]
    public string Str1 { get; set; }

    [Submit]
    public string Str2 { get; set; }
}

繰り返しになりますが、あなたの状況について詳しく知ることなく、これがあなたに必要な情報を提供するかどうかはわかりませんが、少なくともあなたに出発点を与えることを願っています。

編集

クラスが部分的でない場合は、生成されたクラスを、ラッピングプロパティがカスタム属性を使用するクラスでラッピングすることを検討してください。例えば、

/// human generated
public class MyClassWrapper
{
    private readonly MyClass wrapped;

    public MyClassWrapper(MyClass wrapped)
    {
        this.wrapped = wrapped;
    }

    [Submit]
    public int Num1 { get => this.wrapped.Num1; set => this.wrapped.Num1 = value; }

    [Submit]
    public int Num2 { get => this.wrapped.Num2; set => this.wrapped.Num2 = value; }

    [Submit]
    public string Str1 { get => this.wrapped.Str1; set => this.wrapped.Str1 = value; }

    [Submit]
    public string Str2 { get => this.wrapped.Str2; set => this.wrapped.Str2 = value; }
}

編集2

設計と実行時の複雑さを犠牲にして、より動的なソリューションが必要な場合は、次のSOの質問を検討してください。実行時にTypeDescriptorにプロパティレベルの属性を追加するにはどうすればよいですか。同様の懸念に対処しているようです-

実際、コードを生成するのはMSのアプリケーション設定用であるため、プロパティごとに拡張することはできません。

ここではGmanの説明を完全に複製することはしませんが、基本的にこのアプローチは

  1. タイプ(MyClass)またはタイプのインスタンスを取得しますmyObject
  2. 使用TypeDescriptor.GetProvider(MyClass/ myObject).GetTypeDescriptor(MyClass/myObject)タイプまたはオブジェクトのベースラインを取得しますICustomTypeDescriptor
  3. PropertyOverridingTypeDescriptorこのベースライン記述子を使用して構築します
  4. MyClass/myObjectのプロパティの定義をTypeDescriptor.GetProperties(MyClass/で繰り返しmyObject)ます。使用TypeDescriptor.CreatePropertyカスタム属性を追加し、現在のプロパティの定義に基づいて新しいプロパティ定義、作成するEditorAttribute(または、あなたのケースでSubmitAttribute)を、および使用PropertyOverridingTypeDescriptor新しいプロパティ定義を使用するために3で構築します。
  5. 3で構築されたTypeDescriptorOverridingProviderPropertyOverridingTypeDescriptor構築します。
  6. 新しいプロパティ定義を適用するMyClass/myObjectTypeDescriptor.AddProvider

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Swiftの定数Decodableオブジェクトにプロパティを動的に追加するにはどうすればよいですか?

分類Dev

オブジェクトの属性にオブジェクトプロパティを追加するにはどうすればよいですか?

分類Dev

オブジェクト内のすべてのプロパティ値を文字列型に変換するにはどうすればよいですか?

分類Dev

オブジェクトとそのすべてのプロパティを配列に変換するにはどうすればよいですか?

分類Dev

オブジェクトのすべてのプロパティ値をタイプとして使用するにはどうすればよいですか?

分類Dev

オブジェクトのプロパティにプロパティを追加するにはどうすればよいですか?

分類Dev

javascriptでファイルオブジェクトのすべてのプロパティを取得するにはどうすればよいですか?

分類Dev

javascriptの変数名を使用して配列内にオブジェクトプロパティを追加するにはどうすればよいですか?

分類Dev

オブジェクトのプロパティを更新するにはどうすればよいですか?

分類Dev

新しい配列に追加する前にオブジェクトのプロパティを変更するにはどうすればよいですか?

分類Dev

新しい配列に追加する前にオブジェクトのプロパティを変更するにはどうすればよいですか?

分類Dev

関数で定義されているオブジェクトにプロパティを追加するにはどうすればよいですか?

分類Dev

ストアのオブジェクトの動的プロパティをvモデルとして使用するにはどうすればよいですか?

分類Dev

COMオブジェクトのすべてのプロパティを見つけるにはどうすればよいですか?

分類Dev

COMオブジェクトのすべてのプロパティを見つけるにはどうすればよいですか?

分類Dev

オブジェクト名でオブジェクトプロパティを動的に取得するにはどうすればよいですか?

分類Dev

オブジェクトのすべてのプロパティを取得して、それを独自のオブジェクト配列プロパティに挿入するにはどうすればよいですか?

分類Dev

FastMemberを使用して動的オブジェクトのプロパティを取得するにはどうすればよいですか?

分類Dev

TypeScriptでプロパティが空のオブジェクトに追加されないようにするにはどうすればよいですか?

分類Dev

JavascriptまたはjQueryを使用してプロパティを追加せずに、オブジェクトのプロパティを別のオブジェクトにコピーするにはどうすればよいですか?

分類Dev

2つのJavaScriptオブジェクトのプロパティを動的にマージするにはどうすればよいですか?

分類Dev

TypeScriptでオブジェクトにプロパティを動的に割り当てるにはどうすればよいですか?

分類Dev

JSのオブジェクトリテラルにプロパティを追加するにはどうすればよいですか?

分類Dev

配列内のオブジェクトに新しいプロパティを追加するにはどうすればよいですか

分類Dev

javascriptで配列をオブジェクトに変換するときにプロパティを追加するにはどうすればよいですか?

分類Dev

他の配列からオブジェクトにプロパティを追加するにはどうすればよいですか?

分類Dev

JavaScriptでオブジェクトのプロパティを配列に追加するにはどうすればよいですか?

分類Dev

その場でjsonオブジェクトにプロパティを追加するにはどうすればよいですか?

分類Dev

オブジェクトのプロパティタイプを動的に変更するにはどうすればよいですか?

Related 関連記事

  1. 1

    Swiftの定数Decodableオブジェクトにプロパティを動的に追加するにはどうすればよいですか?

  2. 2

    オブジェクトの属性にオブジェクトプロパティを追加するにはどうすればよいですか?

  3. 3

    オブジェクト内のすべてのプロパティ値を文字列型に変換するにはどうすればよいですか?

  4. 4

    オブジェクトとそのすべてのプロパティを配列に変換するにはどうすればよいですか?

  5. 5

    オブジェクトのすべてのプロパティ値をタイプとして使用するにはどうすればよいですか?

  6. 6

    オブジェクトのプロパティにプロパティを追加するにはどうすればよいですか?

  7. 7

    javascriptでファイルオブジェクトのすべてのプロパティを取得するにはどうすればよいですか?

  8. 8

    javascriptの変数名を使用して配列内にオブジェクトプロパティを追加するにはどうすればよいですか?

  9. 9

    オブジェクトのプロパティを更新するにはどうすればよいですか?

  10. 10

    新しい配列に追加する前にオブジェクトのプロパティを変更するにはどうすればよいですか?

  11. 11

    新しい配列に追加する前にオブジェクトのプロパティを変更するにはどうすればよいですか?

  12. 12

    関数で定義されているオブジェクトにプロパティを追加するにはどうすればよいですか?

  13. 13

    ストアのオブジェクトの動的プロパティをvモデルとして使用するにはどうすればよいですか?

  14. 14

    COMオブジェクトのすべてのプロパティを見つけるにはどうすればよいですか?

  15. 15

    COMオブジェクトのすべてのプロパティを見つけるにはどうすればよいですか?

  16. 16

    オブジェクト名でオブジェクトプロパティを動的に取得するにはどうすればよいですか?

  17. 17

    オブジェクトのすべてのプロパティを取得して、それを独自のオブジェクト配列プロパティに挿入するにはどうすればよいですか?

  18. 18

    FastMemberを使用して動的オブジェクトのプロパティを取得するにはどうすればよいですか?

  19. 19

    TypeScriptでプロパティが空のオブジェクトに追加されないようにするにはどうすればよいですか?

  20. 20

    JavascriptまたはjQueryを使用してプロパティを追加せずに、オブジェクトのプロパティを別のオブジェクトにコピーするにはどうすればよいですか?

  21. 21

    2つのJavaScriptオブジェクトのプロパティを動的にマージするにはどうすればよいですか?

  22. 22

    TypeScriptでオブジェクトにプロパティを動的に割り当てるにはどうすればよいですか?

  23. 23

    JSのオブジェクトリテラルにプロパティを追加するにはどうすればよいですか?

  24. 24

    配列内のオブジェクトに新しいプロパティを追加するにはどうすればよいですか

  25. 25

    javascriptで配列をオブジェクトに変換するときにプロパティを追加するにはどうすればよいですか?

  26. 26

    他の配列からオブジェクトにプロパティを追加するにはどうすればよいですか?

  27. 27

    JavaScriptでオブジェクトのプロパティを配列に追加するにはどうすればよいですか?

  28. 28

    その場でjsonオブジェクトにプロパティを追加するにはどうすればよいですか?

  29. 29

    オブジェクトのプロパティタイプを動的に変更するにはどうすればよいですか?

ホットタグ

アーカイブ