[英]How to pick the correct c# overloaded extension method called from a generic method
我正在努力獲得通用方法中調用的正確擴展方法。
我想這是編譯時方法選擇的限制,但在 C# 中是否有巧妙的方法來解決這個問題?
[TestClass]
public class WrongOverloadSelection
{
[TestMethod]
public void WorksNew()
{
new Generic<A>().Test();
}
[TestMethod]
public void FailsGeneric()
{
PicksWrongOverload<A>();
}
public void PicksWrongOverload<T>()
{
new Generic<T>().Test();
}
}
public class A{}
public class Generic<T>{}
public static class Extensions
{
public static void Test(this Generic<A> source) { }
public static void Test<T>(this Generic<T> source)
{
throw new Exception("Not this one!");
}
}
嘗試這個:
// Now it picks then right one
public static void PicksWrongOverload<T>()
{
Extensions.Test((dynamic)new Generic<T>());
}
原因在此處解釋,但本質上在運行時 CLR 會將動態類型轉換為例程所需的類型,如果沒有發生任何違反類型檢查規則的事情,那么您就可以開始了。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.