2017-03-08 105 views
3

我使用Visual Studio代碼和VS 2017發佈後我剛剛安裝了Net Core Tools 1.1.1,希望實現新的C#7模式匹配功能,如來自MSFT的this示例中的一個:模式切換語句

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)); 
} 

我要實現與模式switch語句來代替if-then-else長序列:

var property = obj.GetType().GetProperty("XYZ"); 
var propertyType = Type.GetType(property.PropertyType.FullName); 

switch (propertyType) 
{ 
    case Boolean b: 
     writeLine("Convert a string to a Boolean"); 
     break; 

    case Int32 i: 
     WriteLine("Convert a string to a Int32"); 
     break; 

    default: 
     WriteLine("unknown type, skip"); 
     break; 
}  

當我嘗試編譯我收到以下錯誤:

'Type類型的表達式不能由類型爲bool的模式處理。 [efcore]'

'Type類型的表達式不能由類型爲int的模式處理。 [efcore]'

我在做什麼錯?

回答

6

您需要在切換,而不是在價值類型:

var property = obj.GetType().GetProperty("XYZ"); 
var value = property.GetValue(obj); 

switch (value) 
{ 
    case Boolean b: 
     ... 
    ... 
}