中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

為什么用戶定義的轉換必須是轉換成封閉類型或從封閉類型轉換

發布時間:2021-10-12 11:17:21 來源:億速云 閱讀:154 作者:iii 欄目:編程語言

這篇文章主要介紹“為什么用戶定義的轉換必須是轉換成封閉類型或從封閉類型轉換”,在日常操作中,相信很多人在為什么用戶定義的轉換必須是轉換成封閉類型或從封閉類型轉換問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”為什么用戶定義的轉換必須是轉換成封閉類型或從封閉類型轉換”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

在做類型隱式轉換的時候碰到這一報錯信息“用戶定義的轉換必須是轉換成封閉類型,或者從封閉類型轉換”:

聲明大致如下:

有2個類:A、B,其中類A和類B結構完全相同,只是類B屬于第三方;

在類C的某一個方法中需要返回一個List<A>,如:

public List<A> Func(){
       List<B> list = new List<B>;
       .....       return list;
}

這個時候因為返回類型不同而會報錯;

在類A中進行隱式轉換

class A{
      ....      public static implicit operator List<A>(List<B> value)
      {
              ...
      }
      .....
}

這個時候會報“用戶定義的轉換必須是轉換成封閉類型,或者從封閉類型轉換”的錯誤;
查閱MSDN,在類型轉換一節中有這么2句說明:
1.操作數必須是封閉類型
2.類A到類B的類型轉換定義不能在類C中進行(即2個類的轉換不能在第3個類中定義)
一開始一直認為是第一點的原因造成的編譯錯誤,也誤認為所謂的封閉類型,就一定要是類/結構,不能是集合對象,后來發現造成這一錯誤的原因是第二點,因為當我將類型轉換的定義更改為:

class A{
      ....      public static implicit operator A(List<B> value)  {
              ...
      }
      .....
}


此時編譯通過,也就排除了第一點;
原來對于編譯器來說,class A是一個類型,List<A>也是一個類型,List<B>亦是一個類型,那么對于List<B>類型隱式轉換為List<A>類型的操作自然不能在class A中進行,符合第二點;


補充:
如果要在項目中,有方法:

public List<A> Func(){
       List<B> list = new List<B>;
       .....       return list;
}


非要讓這個list轉換成List<A>怎么做?
其實方法也很簡單,既然List<T>的隱式轉換不能做,那么在返回的時候將list中的元素逐個轉換即可:
隱式轉換定義:

class A{
      ....      public static implicit operator A(B value)  {
              ...
      }
      .....
}


方法定義:

public List<A> Func(){
       List<B> list = new List<B>;
       .....       return list.Select(p=>(B)p).ToList();
}

到此,關于“為什么用戶定義的轉換必須是轉換成封閉類型或從封閉類型轉換”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

稷山县| 汶上县| 广安市| 潮安县| 淮北市| 靖远县| 中牟县| 奎屯市| 晋城| 汝阳县| 靖安县| 汉阴县| 革吉县| 巩留县| 合阳县| 庆城县| 澄迈县| 城口县| 鲁山县| 乌审旗| 布尔津县| 措勤县| 吉安市| 襄汾县| 中卫市| 乡城县| 通河县| 台南县| 莱州市| 张家川| 涿州市| 石渠县| 宁波市| 布拖县| 久治县| 太湖县| 东乡族自治县| 虎林市| 仙游县| 洪雅县| 策勒县|