2016-01-02 41 views
1

我包裹INetFwRule會員轉換,我已經把屬性命名FirewallRule自定義類型,以及優美節省時間在代碼的其他部分從INetFwRule執行轉換時FirewallRule我試圖寫這個隱式轉換器:如何解決:轉換運算符不能從接口類型

C#:

public static explicit operator FirewallRule(INetFwRule rule) { 
    return new FirewallRule { 
     Action = (FirewallRuleAction)rule.Action, 
     ApplicationName = rule.ApplicationName, 
     Description = rule.Description, 
     // etc... 
    }; 
} 

Vb.Net(原始):

Public Shared Narrowing Operator CType(ByVal rule As INetFwRule) As FirewallRule 

    Return New FirewallRule With { 
     .Action = DirectCast(rule.Action, FirewallRuleAction), 
     .ApplicationName = rule.ApplicationName, 
     .Description = rule.Description, 
     ' etc ... 
    } 

End Operator 

不過,我得到這個錯誤在rule參數:

轉換運算符不能從接口類型

轉換還有就是要解決這個要能寫CType的方法?

+0

@Bjørn-RogerKringsjå這很容易說,但是......嘿。感謝評論! – ElektroStudios

+0

你的問題似乎表明,這是可能的在VB中,但不是C# - 但它是無效的兩種語言。 –

+0

@Dave Doknjas不,我只把代碼放在C#中,因爲如果他們沒有看到標記語言中的代碼,很多人就會低估問題......很多人不明白OP也可能尋找C#答案,是唯一的原因,對於造成的混亂感到抱歉。感謝您的評論 – ElektroStudios

回答

3

編譯器禁止您定義將接口作爲參數的轉換運算符,因爲它認爲已經定義了這種轉換(即內置的轉換能力)。

您將需要使用一些其他的語法啓動的INetFwRule轉換到FirewallRule - 例如,擴展INetFwRule

public static class NetFwRuleExt { 
    public static FirewallRule ToFirewallRule(this INetFwRule rule) { 
     return new FirewallRule { 
      Action = (FirewallRuleAction)rule.Action, 
      ApplicationName = rule.ApplicationName, 
      Description = rule.Description, 
      // etc... 
     }; 
    } 
} 

而不是寫你的API的

FirewallRule newRule = (FirewallRule)someRule; 

客戶會寫

FirewallRule newRule = someRule.ToFirewallRule(); 
相關問題