簡體   English   中英

為什么c#編譯器允許返回值類型和變量類型的錯誤匹配?

[英]Why does c# compiler allow incorrect match of return value type and variable type?

請考慮以下代碼:

static void Main()
{
    dynamic a = 1;
    int b = OneMethod(a);
}

private static string OneMethod(int number)
{
    return "";
}

請注意, return type of OneMethod type of breturn type of OneMethod不匹配。 然而,它在運行時構建並拋出異常。 我的問題是為什么編譯器會這么做? 或者這背后的哲學是什么?

這背后的原因可能是Compiler does not know which OneMethod would be called, because a is dynamic. 但為什么它看不到只有一個OneMethod 運行時肯定會有異常。

任何具有dynamic類型操作數的表達式都將具有動態類型。

因此,表達式OneMethod(a)返回一個動態鍵入的對象

所以你的代碼的第一部分相當於

static void Main()
{
    dynamic a = 1;
    dynamic temp = OneMethod(a);
    int b = temp;
}

有一種方法可以證明為什么即使在你的情況下這是明智的,取決於你是否認為編譯器應該改變該特定行的行為,這取決於你添加下面的方法

private static T OneMethod<T>(T number)

現在編譯器將不知道在運行時返回的類型。 它甚至不知道調用哪種方法。 通用或非通用。 如果它在第一種情況下將賦值標記為編譯錯誤然后通過添加完全不同的方法將其移動到運行時錯誤,您不會感到驚訝嗎?

暫無
暫無

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

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