元组太好了!我知道我可以从带有元组的方法返回多个值并命名它们,这样它们就不必是 Item1、Item2 等。我可以去var results = (result1: r1, result2: r2);
但是如何在这样的接口声明中使用元组文本呢?
public interface IFoo {
(T1, T2) Bar();
}
尝试做(result1: T1, result2: t2) Bar();
但它不起作用。有没有办法从接口方法返回命名元组?
命名元组作为方法返回类型的语法不正确:
public interface IFoo {
(T1 result1, T2 result2) Bar();
}
注意:这是因为返回类型定义了类型和名称,而分配元组文本的名称定义了值和名称。
// Method return syntax. Type & Name
public (bool success, T payload) TryGetPayload<T>() { }
// Literal assignment syntax. Name & Value
var result = (success: true, payload: t);
您不能对任何此类接口使用"文字",除非作为具体方法的返回值。
但是,您可以使用类型。如果你的 T1 和 T2 是通用的,你可以使用 Ivan Stoev 对这个问题的评论:
public interface IFoo<T1, T2> {
(T1, T2) Bar();
}
如果你的 T1 和 T2 是具体的,你可以直接使用它们,正如 Neil 的回答中提到的:
public interface IFoo<T1, T2> {
(int, string) Bar();
}
如果需要,您还可以为它们命名:
public interface IFoo<T1, T2> {
(T1 theLeft, T2 theRight) Bar();
}
或
public interface IFoo<T1, T2> {
(int theNumber, string theName) Bar();
}