<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                # Compiler Error CS0029 無法將類型“type”隱式轉換為“type” 編譯器要求顯式轉換。例如,可能需要將右值轉換成與左值相同的類型。或者必須提供轉換例程以支持某些運算符重載。 在將某個類型的變量賦給其他類型的變量時必須進行轉換。當在不同類型的變量之間進行賦值時,編譯器必須將賦值運算符右邊的類型轉換為該賦值運算符左邊的類型。假設有下面的代碼: ``` int i = 50; long lng = 100; i = lng; ``` i = lng; 進行賦值運算,但賦值運算符左右兩邊變量的數據類型不匹配。進行賦值前,編譯器將變量 lng(類型為 long)隱式轉換為 int。此為隱式轉換,原因是沒有代碼顯式指示編譯器執行此轉換。此代碼的問題在于上述轉換被視為收縮轉換,而編譯器不允許進行隱式收縮轉換,原因是可能會丟失數據。 如果轉換后的數據類型所占用的內存存儲空間比轉換前的數據類型所占用的少,則存在收縮轉換。例如,將 long 類型轉換為 int 類型就被視為收縮轉換。long 類型占用 8 個字節的內存,而 int 類型只占用 4 個字節。若要查看數據丟失如何發生,請考慮以下示例: ``` int i = 50; long lng = 3147483647; i = lng; ``` 變量 lng 現在包含的值無法存儲在變量 i 中,原因是該值太大。如果要將該值轉換為 int 類型,就會丟失一些數據,并且轉換后的值不同于轉換前的值。 擴大轉換與收縮轉換相反。對于擴大轉換,轉換后的數據類型占用的內存存儲空間比轉換前的數據類型占用的多。下面是一個擴大轉換的示例: ``` int i = 50; long lng = 100; lng = i; ``` 請注意此代碼示例和第一個示例之間的區別。這里,變量 lng 位于賦值運算符的左邊,所以它是賦值的目標。在可以進行賦值前,編譯器必須將變量 i(類型為 int)隱式轉換為 long 類型。這是一個擴大轉換,因為我們是從一個占用 4 個字節內存的類型 (int) 轉換為一個占用 8 個字節內存的類型 (long)。由于不會發生數據丟失,所以允許進行隱式擴大轉換。任何可以用 int 類型存儲的值也可以用 long 類型存儲。 我們知道隱式收縮轉換是不允許的,因此為了能夠編譯這些代碼,就需要顯式轉換數據類型。顯式轉換是使用強制轉換來完成的。強制轉換是 C# 中用來描述將一種數據類型轉換為另一種數據類型的術語。若要編譯這些代碼,我們需要使用以下語法: ``` int i = 50; long lng = 100; i = (int) lng; // cast to int ``` 第三行代碼通知編譯器在進行賦值前,將變量 lng(類型為 long)顯式轉換為 int 類型。切記,使用收縮轉換可能會丟失數據。使用收縮轉換時應小心,而且即使可以編譯代碼,也可能會在運行時獲得意外的結果。 此討論只針對值類型。使用值類型就是直接使用存儲在變量中的數據。但 .NET Framework 還具有引用類型。使用引用類型就是使用對變量的引用,而不是使用實際數據。引用類型的示例是類、接口和數組。不能隱式或顯式地將一個引用類型轉換為其他引用類型,除非編譯器允許特定的轉換或可以實現相應的轉換運算符。 下面的示例生成 CS0029: ``` // CS0029.cs public class MyInt { private int x = 0; // Uncomment this conversion routine to resolve CS0029 /* public static implicit operator int(MyInt i) { return i.x; } */ public static void Main() { MyInt myInt = new MyInt(); int i = myInt; // CS0029 } } ``` ## 請參閱 [轉換運算符(C# 編程指南)](https://msdn.microsoft.com/zh-cn/library/09479473.aspx)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看