3
的問題是,我可以以某種方式限制泛型重載嚴格物業類型.. 現在還不清楚,所以這裏有一個例子:是否可以將泛型重載限制爲屬性類型?
我有一些類
public class Obj
{
public double Width { get; set; }
public float WidthF { get; set; }
}
和一些擴展它
public static class TestGenericOverride
{
public static void Do<TObj, TProp>(this TObj src,
Expression<Func<TObj, TProp>> expr, TProp val)
{
Console.WriteLine("Do: typeof(TProp) = {0}", typeof(TProp).Name);
}
}
,這是主要
static void Main(string[] args)
{
var o = new Obj();
o.Do(p => p.Width, 100); //1: typeof(TProp) = Double
o.Do(p => p.Width, 100.0); //2: typeof(TProp) = Double
o.Do(p => p.WidthF, 100); //3: typeof(TProp) = Single
o.Do(p => p.WidthF, 100.9); //4: typeof(TProp) = Double
Console.ReadLine();
}
我想要的是讓最後的呼叫(#4)不可用。可能嗎?
換句話說: 如果在表達屬性類型是浮動的,我想,只有浮動過載可用,沒有雙超載
謝謝!
你不能。你將不得不施放,例如:o.Do(p =>(double)p.WidthF,100.9);' – leppie
@leppie 似乎你說'o.Do(p =>(float)p.WidthF,100.9 )',因爲雙重過載將被自動調用。 (默認情況下100.9字面值是雙倍)。 或者我們可以編寫'o.Do(p => p.WidthF,100.9F)' – garek
您的問題僅限於double/float還是這是一個通用示例? –