加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 用模式切换语句

发布时间:2020-12-15 23:38:05 所属栏目:百科 来源:网络整理
导读:我使用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.
我使用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]”

我究竟做错了什么?

解决方法

您需要打开值,而不是值的类型:

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读