小编gmo*_*979的帖子

使用struct强制执行内置类型验证的优缺点

更新:重新发布 在程序员堆栈交换上,因为主要基于意见被搁置.

通常,域对象具有可以由内置类型表示的属性,但其有效值是可以由该类型表示的值的子集.

在这些情况下,可以使用内置类型存储该值,但必须确保始终在输入点验证值,否则我们可能最终使用无效值.

解决此问题的一种方法是将值存储为自定义struct,该自定义具有private readonly内置类型的单个支持字段,其构造函数验证提供的值.然后,我们始终可以确保仅使用此struct类型使用经过验证的值.

我们还可以提供与底层内置类型相关的强制转换操作符,以便值可以作为基础类型无缝地进入和退出.

以我们需要表示域对象名称的情况为例,有效值是长度在1到255个字符之间的任何字符串.我们可以使用以下结构来表示:

public struct ValidatedName : IEquatable<ValidatedName>
{
    private readonly string _value;

    private ValidatedName(string name)
    {
        _value = name;
    }

    public static bool IsValid(string name)
    {
        return !String.IsNullOrEmpty(name) && name.Length <= 255;
    }

    public bool Equals(ValidatedName other)
    {
        return _value == other._value;
    }

    public override bool Equals(object obj)
    {
        if (obj is ValidatedName)
        {
            return Equals((ValidatedName)obj);
        }
        return false;
    }

    public static implicit operator string(ValidatedName x)
    { …
Run Code Online (Sandbox Code Playgroud)

.net c#

6
推荐指数
1
解决办法
531
查看次数

标签 统计

.net ×1

c# ×1