【问题标题】:Struct or class for internationalized name object in .NET?.NET 中国际化名称对象的结构或类?
【发布时间】:2015-03-15 10:41:26
【问题描述】:

我有一个 Person 类,我目前正在尝试添加名称属性, 作为类或结构。背景是,在全球范围内思考,并非每个人的名字都必须由名和姓组成。所以我决定让它更具原子性并创建一个新的通用“名称”类或结构。

因为名称的每个部分都将单独保存在“名称”类或结构中,所以我通常更喜欢结构而不是类。

为了更实用:

"John Doe" 将被保存为 Name struct "John" 和 Name struct "Doe"。

这是背景。

现在,我想添加该属性,如果该名称已通过验证:

public struct Name
{
    private string _name;

    public bool Verified { get; set; }

    public String(string name)
    {
        this._name = name;
    }

    public static implicit operator String(string name)
    {
        return new Name(name);
    }

}

这是实现它的正确(常见)方式吗? 当你有建议时,请告诉我:)

【问题讨论】:

    标签: c# class internationalization coding-style structure


    【解决方案1】:

    我认为你把它弄得太复杂了。只需让 Person 拥有一个名为 Name 的属性。

    验证的目的是什么?

    【讨论】:

    • 你好,你好,晚安,我必须承认,经过所有的思考,这将是最简单的方法。但是我必须搜索 Person 的名字,然后我会遇到性能问题,因为我必须拆分每个 Person 的名字并检查它。所以我认为对于搜索的用例,最好以原子方式进行,但你是对的,如果这个用例不存在,我会这样做:) 验证 - 如果保存的名称是这个人的真实姓名。
    • 您必须拆分每个人的姓名并进行检查是什么意思?检查什么?
    • 例如“John Doe”将保存在属性 Person.Name 中。如果我在列表中有数百个这样的人并且我想知道哪个人的名字包含“John”,我将不得不用空格分割每个名字或使用正则表达式,如果我保存了这些名字,这两个过程都会花费更多时间在一个属性中,而不是原子的。否则它可能会更便宜,我想直到现在。
    • 没有。如果你有一个名为 Persons 的人员列表,你可以这样做: var containsJohn = Persons.Where(x => x.Name.Contains("John")).ToList();
    • 哦!好吧,我不知道,但现在知道它是完美的,谢谢!然后,我会这样做:) 那我应该使用结构来保存验证属性吗?
    猜你喜欢
    • 2011-05-24
    • 2015-10-13
    • 2011-06-05
    • 2011-01-08
    • 1970-01-01
    • 2018-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多