2015-01-09 69 views
1

我希望編譯器能夠爲我推斷出一種類型,但我不確定它是否可行,或者最佳選擇是什麼。高級類型推理

我想要做的:

public static TValue Get<TValue>(TKey key) where TValue : Mapped<TKey> { ... } 

public class MyObject : Mapped<int> { ... } 

而且有C#推斷TKeyint。有沒有辦法做這樣的事情?如果不是,那麼最好的選擇是什麼?

我想避免做一些像Get<MyObject, int>(1);

編輯:

任何人誰在未來看到這一點,類似的問題已經被問herehere

+4

看到'TKey'不給編譯器,以什麼類型'TValue'可能是任何線索。 – Chris 2015-01-09 20:56:52

+0

我編輯了你的標題。請參閱:「[應該在其標題中包含」標籤「](http://meta.stackexchange.com/questions/19190/)」,其中的共識是「不,他們不應該」。 – 2015-01-09 20:58:29

回答

7

沒有,是沒有辦法在C#中做到這一點。你實質上要求的是能夠明確指定一些泛型參數並且推斷其餘部分。這在C#中不受支持;泛型類型推斷需要針對所有泛型參數或沒有泛型參數進行。

1

@Servy是正確的,但正如在其他線程上已經指出的那樣,有時您可以將類型拆分爲可以推理的東西。

在這個例子中,我們在類聲明中指定了非可推式類型,並在方法聲明中指定了可推式類型。

public static class InferHelper<TValue> 
    where TValue : class 
{ 
    public static TValue Get<TKey>(TKey key) 
    { 
     // do your magic here and return a value based on your key 
     return default(TValue); 
    } 
} 

,你這樣稱呼它:

var result = InferHelper<MyObject>.Get(2);