用模式切换语句

时间:2017-03-08 09:39:14

标签: c# .net-core

我使用Visual Studio Code,在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]'

我做错了什么?

1 个答案:

答案 0 :(得分:7)

您需要启用,而不是值

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

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