2017-02-13 8 views
10

の属性、.NETは、新しい戻り値のタプル型(関数型プログラミング)を導入し、その代わりに:使用してC#7.0では値タプル

[NotNull] 
WrapperUser Lookup(int id) 

私は値のタプルを使用したい:

(User, Info) Lookup(int id) 

そして私はこれらの戻り値の型の属性を使用したい:

([NotNull] User, [CanBeNull] Info) Lookup(int id) 

しかし、VS2017は、私はそれを行うことはできません。ラッパークラスを使用せずに属性を使用するにはどうすればよいですか?

答えて

1

できません。

(User, Info) Lookup(int id) 

ValueTuple<User,Info> Lookup(int id) 

のためだけ糖衣構文であるValueTupleの型パラメータは、属性のための有効なターゲットではありません。ラッパークラスのほかにあなたの唯一のオプションは、あなただけのようにそれを使用することができますNonNullable wrapper

(NonNullable<User>,NonNullable<Info>) Lookup(int id) 

で型パラメータをラップすることです通常ValueTuple、例えば

(NonNullable<User>,NonNullable<Info>) Lookup(int id) => (new User(), new Info()); 
(User user, Info info) = Lookup(5); 

そうしないと、要素がタプル要素に名前を割り当てるために使用されTupleElementNamesAttributeのように、配列でnullすることができたタプルを示す全体ValueTupleにカスタム属性を固執ことができます。あなたは、しかし、仕事を行う独自のビジュアルスタジオ/ resharperプラグインを書く必要があります。

関連する問題