我使用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]'
我做错了什么?
答案 0 :(得分:7)
您需要启用值,而不是值 的
var property = obj.GetType().GetProperty("XYZ");
var value = property.GetValue(obj);
switch (value)
{
case Boolean b:
...
...
}