簡體   English   中英

C#中的模板函數 - 返回類型?

[英]Template function in C# - Return Type?

似乎c#不支持類似c ++的模板。 例如

template <class myType>
myType GetMax (myType a, myType b) {
 return (a>b?a:b);
}

我希望我的函數有基於其參數的返回類型,我如何在c#中實現這一點? 如何在C#中使用模板

編輯:我可以使用object和getType幾乎相同的目的?

C#中最接近C ++模板的是泛型 - 但它們並不是非常接近。 特別是,您不能在泛型類型值之間使用>類的運算符,因為編譯器不了解它們(並且您不能基於運算符約束類型)。 另一方面,你可以寫:

public T GetMax<T>(T lhs, T rhs)
{
    return Comparer<T>.Default.Compare(lhs, rhs) > 0 ? lhs : rhs;
}

要么

public T GetMax<T>(T lhs, T rhs) where T : IComparable<T>
{
    return lhs.CompareTo(rhs) > 0 ? lhs : rhs;
}

請注意,其中第一個是空安全的; 第二個不是。

泛型的完整描述遠遠超出Stack Overflow答案的范圍; MSDN有一些信息,或咨詢您最喜歡的C#書。

C#中的泛型不如C ++中的模板強大。 你想做什么在C#中不起作用。

針對您的情況的黑客/解決方法是

public T GetMax<T>(T a, T b) where T: IComparable {
    if(a.CompareTo(b) > 0) {
        return a;
    }
    return b;
}

你想看一下泛型 句法:

public T GetMax<T>(T a, T b) {
    return (a>b?a:b);
}

更新因為一些評論...我只是想提供一個非常快速的概述。 是的,我想它不能正確編譯或執行。 但這是關於它的外觀的基本思路。 你會在這個主題上找到更完整的回復 - 同時。

執行語法:

int a = 5;
int b = 10;
int result = GetMax(a, b);

希望這可以幫助,

此致,托馬斯

您在C#中使用Generics來獲得類似模板的功能。

http://msdn.microsoft.com/en-us/library/ms379564(VS.80).aspx

public class MyType<T>
{
}

你的代碼會變成這樣:

public T GetMax<T>(T a, T b) where T : IComparable<T>
{
    return a.CompareTo(b) > 0 ? a : b;
}

泛型!

class MyClass<T> where T : IEnumerable (any parent class here!)
{
   T myGeneric {get; set;}
}

你的意思是這樣的事情

   public static IEnumerable<TResult> SelectIfNotNull<TSource, TResult>(this IEnumerable<TSource> source, Func<TSource, TResult> selector)
   {
       if (source == null) return null;
       return source.Select(selector);
   }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM