これを引き起こした制限は何ですか?
あなたが説明したことができない理由は、おそらく何らかの制限によるものではありませんが、それは純粋に言語設計上の決定です。基本的に、言語を設計するとき、彼らは「これは可能であるべきだが、これは不可能だ」と言った。彼らが本当にこれを可能にしたいのであれば、「制限」は対処されており、これは可能です. ただし、この決定の背後にある具体的な理由はわかりません。
/.../ これらの値を含む文字列を渡し (文字列型のコードも引き起こします!)、文字列に変換し、実際の値を使用するだけでなく、Regex に依存して値を取得しようとします /.../
私も似たような状況に陥ったことがあります。機能的な方法で何かを実装するために、ラムダ式で属性を使用したいことがありました。しかし、結局のところ、c# は関数型言語ではなく、非関数型の方法でコードを記述した場合、そのような属性は必要ありませんでした。
要するに、私は次のように考えています。これを関数的な方法で開発したい場合は、f# のような関数型言語を使用する必要があります。現在、私はc#を使用していますが、機能しない方法でそれを行っているため、そのような属性は必要ありません。
おそらく、現在のように属性を使用するのではなく、単純に設計を再検討する必要があります。
更新 1:
c# は関数型言語ではないと主張しましたが、それは主観的な見方であり、「関数型言語」の厳密な定義はありません。私は Adam Wright の意見に同意します。なぜ C#は関数型プログラミング言語なのですか?
更新 2: Jon Skeet によるこの投稿を見つけました: https://stackoverflow.com/a/294259/1105687ジェネリック属性タイプを許可しないことを考慮していますが、この場合の理由は似ている可能性があります。
Eric Lippert からの回答 (言い換え): 特に理由はありませんが、あまり価値のないユース ケースで言語とコンパイラの両方が複雑になるのを避けるためです。