程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C#的+=運算符兩例(2)

C#的+=運算符兩例(2)

編輯:關於C語言

C#中復合賦值運算符比Java規定了更多的轉換相關規則,不 過還是可以很直觀的理解:(注意上面用藍色色高亮的那句)只有當x op y和x = y都是合法的時候,x op= y才是合法的。

也正是因為 這樣,所以justjavac提到的Java的兩個陷阱在C#裡都不存在:

1、編譯錯誤:

C#代碼

static class Program {
    static void Main(string[] args) {
        byte b = 0;
        int i = 1;
        b += i; // error CS0266: 無法將類型“int”隱式轉換為“byte”。存在一個顯式轉換(是否缺少強制轉換?)
    }
}

不用像Java那樣等到運行的時候再發現數據被剪了。

2、編譯沒問題,運行也沒問題:

C#代碼

using 

System;
using System.Linq.Expressions;

static class Program {
    static void Main(string[]  args) {
        string s = "str: ";
 object obj = (Expression<Func<int,  int>>) (x => x + 1);
 s += obj;
 obj += s;
 Console.WriteLine(s);   // str: x =>  (x + 1)
        Console.WriteLine(obj); // x => (x + 1)str: x => (x + 1)
    }
}

==================

從OpenJDK的郵件列表裡挖個東西順帶放這兒:

Changeset: f09d6a3521b1
Author:    jjg
Date:      2008-03-06 10:07 -0800
URL:       http://hg.openjdk.Java.Net/jdk7/hotspot-comp/langtools/rev/f09d6a3521b1
4741726: allow Object += String
Summary: remove code in line with restriction removed from JLS
RevIEwed-by: mcimadamore
Contributed-by: michaelbailey0 at gmail.com
! src/share/classes/com/sun/tools/javac/comp/Attr.java
+ test/tools/javac/StringConversion2.java
- test/tools/javac/expression/ObjectAppend.Java
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved