C#7:元组和泛型

Ian*_*son -1 c# generics c#-7.0

C#7有一个新功能,允许我们轻松定义元组,因此我们可以轻松使用包含多个值的结构.

有没有办法将元组用作泛型类型约束或类似?例如,我试图定义以下方法:

public void Write<T>(T value)
    where T : (int x, int y)
{

}
Run Code Online (Sandbox Code Playgroud)

我意识到这个特定的例子是毫无意义的,但是我想象其他场景中有一个包含从另一个类型派生的类型的元组会很有用:

static void Main(string[] args)
{
    var first = new Derived();
    var second = new Derived();

    var types = (t: first, u: second);
    Write(types);

    Console.ReadLine();
}


public static void Write((Base t, Base u) things)
{
    Console.WriteLine($"t: {things.t}, u: {things.u}");
}

public class Base { }
public class Derived { }
Run Code Online (Sandbox Code Playgroud)

此示例不起作用,因为firstsecond是类型Derived.如果我制作它们的类型,Base这工作正常.

Ian*_*son 7

这是我自己的愚蠢错误.我忘记了BaseDerived... 之间的继承

这很好用:

    public static void Write((Base t, Base u) things)
    {
        Console.WriteLine($"t: {things.t}, u: {things.u}");
    }

    public class Base { }
    public class Derived : Base { }
Run Code Online (Sandbox Code Playgroud)

就像这样:

    public static void Write<T>((T t, T u) things)
    {
        Console.WriteLine($"t: {things.t}, u: {things.u}");
    }
Run Code Online (Sandbox Code Playgroud)

还有这个:

    public static void Write<T>((T t, T u) things)
        where T : Base
    {
        Console.WriteLine($"t: {things.t}, u: {things.u}");
    }
Run Code Online (Sandbox Code Playgroud)