2017-02-13 51 views
10

在C#7.0,.NET引入了一个新的返回值的元组类型(函数式编程),所以不是:使用属性值元

[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); 

否则,你可以坚持一个自定义属性整个ValueTuple表明哪一个数组元素可以是null一个数组,像用来指定名称的元组元素TupleElementNamesAttribute。你将不得不编写自己的visual studio/resharper插件来完成这项工作。

相关问题