2012-11-07 49 views
4

我可以引用這樣的泛型類型/方法的定義:如何將XML文檔中顯示一般參數參數

/// <summary> 
/// Takes a <see cref="Func{T}"/>. 
/// </summary> 
public void Method<T>(Func<T> func) { } 

但是這不起作用:

/// <summary> 
/// Takes a <see cref="Func{Int32}"/>. 
/// </summary> 
public void Method(Func<int> func) { } 

ReSharper的/生成的幫助文件說Func<TResult>

回答

1

在第一個示例中,您將cref屬性的類型指定爲類型:Func<T>。這與System命名空間中的類型完全匹配。我們需要創建一個指向該類型文檔的鏈接:Func<TResult>。很容易找到並鏈接到。請注意,這會產生一種鏈接到一種類型。

在第二個示例中,當您尋找類型Func<Int32>時,這不是一種真正的指向文檔的類型。命名空間System中的類型是通用的,並且帶有一個參數。您可能不認爲它完全匹配,但解析器假定Int32是您用於類型參數的名稱,並且您希望指向它可以輕鬆在System命名空間中找到的類型。再次,這會產生一個鏈接,您可以在System命名空間中找到實際可以找到的一個類型。

你可能想創建一個使用兩個鏈接兩種類型,就像是Enumerable.Sum參考頁面上做了參考。對於該方法,

public static int Sum<TSource>(
    this IEnumerable<TSource> source, 
    Func<TSource,int> selector 
) 

它們記錄使用兩個鏈路的參數的選擇:

類型:System.Func < TSource,Int32>

在這裏,它們有兩種類型的引用,不是一個。其中一個鏈接,看起來是給代表組System.Func(這又是不與文檔我們可以指向一個類型)的參考,但它實際上指向System.Func<T,TResult>委託的文檔。另一個鏈接是System.Int32

如果你得到更正式的你可以做到這一點。該XML通過編譯器驗證,如果你使用

<see cref="T:System.Func{T:System.Int32}"/> 

不過,我不知道怎麼會在大多數模板顯示不變。這是用來記錄實體框架源代碼的東西。舉一個例子(即不能很好地顯示),你可以看看爲System.Data.Entity.Core.Common.CommandTrees.ExpressionBuilder namespace的文檔。

我也看到了它與

<see cref="T:System.Func &lt; T:System.Int32 &gt;"/> 

做同樣,無視很好地,只顯示它由XML,即通過編譯器語法驗證該產品的標記去的模板。從xml轉換爲創建實際文檔時,您可能會有更好的運氣。

+0

所以沒有辦法做我想要做的(也許與另一個屬性)? –

+0

我已經更新了我的答案,以展示如何去做我認爲你想做的事。 –