簡體   English   中英

function 的動態參數 C# 改變它的返回類型

[英]C# dynamic parameter of a function changes it return type

一個簡單的代碼

dynamic v = "";
var a = F("");
var b = F(v);

static bool F(dynamic o) => true;

變量a的類型是bool,但是b是動態的而不是bool,為什么?

簡短的回答是,一旦您聲明了dynamicdynamic “行為”(?)繼續通過所有未來的引用傳播,直到您明確解決它。

並不是F(o)的返回類型發生了變化,而是編譯器根本不在乎。

dynamic變量的聲明已禁用編譯時對該變量的所有引用的類型檢查......再次,直到(或除非)它被明確解決。

但是,我期待閱讀其他解釋。

對於有效的 C# 編譯器,“變量 a 的類型是 bool,但 b 是動態而不是 bool”的初始斷言是不正確的,也沒有用代碼說明。

以下程序將無法編譯,表明 b 確實是一個boolhttps://dotnetfiddle.net/E6fn0P運行代碼。

using System;
                    
public class Program
{
    public static void Main()
    {
        static bool F(dynamic o) => true;
        
        dynamic v = "";
        var a = F("");
        var b = F(v);
        _ = b.Foo;

        Console.WriteLine("Hello World");
    }
}

預期的編譯器錯誤是:

編譯錯誤(第 12 行,第 13 列): “bool”不包含“Foo”的定義,並且找不到接受“bool”類型的第一個參數的可訪問擴展方法“Foo”(您是否缺少 using 指令或裝配參考?)

暫無
暫無

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

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