[英]Why can't c# infer casting?
所以我最近第一次開始使用反射,發現 GetType() 知道 object 的原始類型,即使它只是存儲為 object。
foreach(object o in (IEnumerable) property.GetValue(element))
{
List(o, verbose, int.MaxValue, subIncludes[attribute.Name], indents + 4);
}
所以這里 o 實際上被傳遞到一個泛型方法中。 發現傳入后,o.GetType(); 返回實際的 class 類型而不是 System.Object 讓我感到驚訝。 對於 arguments,可以說類型是產品。 所以如果類型是已知的,為什么需要像這樣將 o 轉換為Product p = (Product) o;
而不是只做Product p = o
? 既然類型是已知的,為什么不推斷強制轉換是期望的結果呢?
強制轉換是一個編譯時特性。 它告訴編譯器你知道你在做什么。 作為第二個示例的直接分配是在運行時評估的。
在編譯時它不知道o
是什么。 在這里使用不是Product
的東西是完全有效的。
您的主要問題 - ...instead of just doing Product p = o
- 如果Product
實現了一個隱式運算符怎么辦?
public static implicit operator Product(object o)
然后,假設您想使用新的、寬松的轉換語法 - Product p = o
運行時將不知道轉換它的方式 - 使用隱式轉換或您的轉換。 也許這就是不允許這種語法的原因。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.