簡體   English   中英

為什么 c# 不能推斷鑄造?

[英]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.

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