亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

有比這更好的替代“打開類型”嗎?

有比這更好的替代“打開類型”嗎?

C#
白豬掌柜的 2019-06-23 16:15:59
有比這更好的替代“打開類型”嗎?認為C#不能開關關于類型(我認為它不是作為特例添加的,因為is-關系意味著不止一個不同的關系)案例(可能適用),是否有更好的方法來模擬切換類型?void Foo(object o){     if (o is A)     {         ((A)o).Hop();     }     else if (o is B)     {         ((B)o).Skip();     }     else     {         throw new ArgumentException("Unexpected type: " + o.GetType());     }}
查看完整描述

3 回答

?
至尊寶的傳說

TA貢獻1789條經驗 獲得超10個贊

用C#7,它附帶于VisualStudio 2017(第15.*版),您可以在case語句(模式匹配):

switch(shape){
    case Circle c:
        WriteLine($"circle with radius {c.Radius}");
        break;
    case Rectangle s when (s.Length == s.Height):
        WriteLine($"{s.Length} x {s.Height} square");
        break;
    case Rectangle r:
        WriteLine($"{r.Length} x {r.Height} rectangle");
        break;
    default:
        WriteLine("<unknown shape>");
        break;
    case null:
        throw new ArgumentNullException(nameof(shape));}

使用C#6,您可以在()運算符(謝謝@喬伊·亞當斯):

switch(o.GetType().Name) {
    case nameof(AType):
        break;
    case nameof(BType):
        break;}

使用C#5和更早版本,您可以使用Switch語句,但是您必須使用包含類型名稱的魔術字符串.這對重構并不是特別友好的(謝謝@nuke聚變)

switch(o.GetType().Name) {
  case "AType":
    break;}




查看完整回答
反對 回復 2019-06-23
?
MMTTMM

TA貢獻1869條經驗 獲得超4個贊

一種選擇是從TypeAction(或其他代表)。根據類型查找操作,然后執行它。我以前在工廠用過這個。


查看完整回答
反對 回復 2019-06-23
  • 3 回答
  • 0 關注
  • 421 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號