2016-12-13 76 views
-2

C#7有一個新特性,它允許我們輕鬆定義元組,所以我們可以輕鬆地處理包含多個值的結構。C#7:元組和泛型

是否有任何方式使用元組作爲泛型約束,或類似?例如,我試圖定義如下方法:

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

} 

我意識到這個特殊的例子是相當無意義的,但我想其他場景中這將是非常有用的,其包含了另一個派生的類型的元組類型:

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 { } 

這個例子不起作用,因爲firstsecondDerived類型。如果我讓他們的類型Base這工作正常。

回答

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 { } 

至於做這個的:

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

這:

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