接口声明中的元组文本



元组太好了!我知道我可以从带有元组的方法返回多个值并命名它们,这样它们就不必是 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();
}

最新更新