在C#7.0中,.NET引入了一个新的返回值元组类型(函数式编程),因此代替:
[NotNull]
WrapperUser Lookup(int id)
我想使用值元组:
(User, Info) Lookup(int id)
我想为这些返回类型使用属性:
([NotNull] User, [CanBeNull] Info) Lookup(int id)
但VS2017不允许我这样做。如何在不使用包装类的情况下使用属性?
答案 0 :(得分:3)
你不能。
(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插件才能完成这项工作。