2016-06-17 36 views
1

鑑於此F#:無法在C#中投的F#對象

namespace DU_Sample 

type StateA = { Counter: int } 
type StateB = { Counter: int; Pass: bool } 

type DU = 
| A of StateA 
| B of StateB 

而這個C#:

[TestMethod] 
public void TestMethod1() 
{ 
    var stateB = GetStateB(); 
    Assert.IsTrue(stateB.IsB); 
    //Assert.IsTrue(((DU_Sample.StateB)stateB).Pass); // nope 
    //var nutherB = DU_Sample.DU.NewB(stateB); // nope 
    Assert.IsTrue(((dynamic)stateB).Item.Pass); // pass 
} 

private static DU_Sample.DU GetStateB() 
{ 
    var stateB = new DU_Sample.StateB(0, true); 
    return DU_Sample.DU.NewB(stateB); 
} 

我怎麼能投的區分聯合類型的這部分之一,以訪問那部分的屬性?

+1

爲什麼'GetStateB'返回比'StateB'例如其他的東西嗎?有多混淆.. – ildjarn

+0

我認爲你需要施放'stateB.Item'屬性。 –

+1

你有沒有試過轉換成'DU_Sample.DU.B'? –

回答

1

在這兩種情況下,你必須(下)投再使用屬性Item

Assert.IsTrue((stateB as DU_Sample.DU.B)?.Item.Pass ?? false); 
var nutherB = DU_Sample.DU.NewB(((DU_Sample.DU.B)stateB).Item) 
相關問題