微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用包含条件的 Lambda 表达式在 C# 中创建属性

如何解决使用包含条件的 Lambda 表达式在 C# 中创建属性

我开始学习 C#,想知道如何使用 Lambda 表达式改进属性

我知道如何将它用于“get”而不是“set”。

我目前的做法:

public string Name
            {
                get => name;
                set
                {
                    if(value.Trim().Length >= 1) { name = value; }
                    else
                    {
                        characterCount--;
                        throw new Exception("Error : Character name is invalid");                        
                    }
                }
            }

以下答案将帮助我更多地了解它们!

解决方法

Lambda 表达式就是这样的:表达式;带有多个语句的代码:不是单个表达式,因此:不要尝试将其压缩到 lambda 中。 {...} 方法没有任何问题 - 它清晰、可读、可维护等。别管它!

请注意,您可以使用“when”来折磨“switch 表达式”以强制执行您的条件以获得成功案例,并使用默认 (_) 案例如果 switch表达式抛出异常,并将switch表达式的结果赋值给字段;从技术上讲,它会为集合使用 lambda 并保持您的意图,但 IMO 会降低可读性。所以:不要那样做!

您的目标不应该是编写巧妙的代码——而应该是编写清晰明了的代码。您已经拥有的。

注意:我不会对 characterCount--; 发表任何评论 - 这听起来像是一个非常奇怪的副作用,而且可能是一件坏事。

但是(完全未经测试,仅用于说明):

public string Name
{
    get => name;
    set => name = value switch {
        string s when !string.IsNullOrWhitespace(s) => s,_ => throw new Exception("Error : Character name is invalid"),}
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。