0

我正在为我的 C#.NET 项目准备一个实体框架模型(代码优先)。我突然意识到,我要将 PageTitles 存储为字符串,除了可用的最大和最小位之外,没有长度限制。

我假设如果我知道一个字符串的长度为 255 个字符并且永远不会超过这个长度,我可以将我的字符串声明为一个新的 char[255]。

使用 char 而不是 string 有什么缺点。使用 char 而不是 string 有什么好处。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace ContentManagementSystem.Models
{
    public class Page
    {
        int Id { get; set; }
        string PageTitle { get; set; }
        // This seems wasteful and unclear     

        char[] PageTitle = new char[255]; 
        // How would i apply { get; set; } to this?
    }
}

有什么方法可以限制字符串的大小吗?

---------------已回答----------

现在这是我的代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

using System.ComponentModel.DataAnnotations;
using System.Data.Entity;

namespace ContentManagementSystem.Models
{
    public class Page
    {
        public int Id { get; set; }        
        [MaxLength(255)] public string Title { get; set; }
        [MaxLength(255)] public string Description { get; set; }
        public string Content { get; set; }
    }

    public class MyDbContext : DbContext
    {
        public DbSet<Page> Pages { get; set; }
    }
}
4

5 回答 5

6

char[]不,当您打算将它作为字符串进行操作时,您不应该使用它。为什么?因为string如果您使用字符数组,您将无法使用大量有用的方法。字符数组的性能优势(如果有的话)将非常小。

于 2013-02-08T17:18:38.790 回答
1

编辑:正如 DamienG 所指出的,这仅在代码优先的情况下才有效。

你在找这个吗?

[MaxLength(255)]
public string PageTitle { get; set; }

引用的 dll: Assembly System.ComponentModel.DataAnnotations.dll

引用的命名空间: namespace System.ComponentModel.DataAnnotations

于 2013-02-08T17:19:02.167 回答
1

我不会将字符串存储为字符,因为当你将它们传递给需要字符串的东西时,你会永远诅咒它们。

您可以使用模型优先的设计器或使用 Code First 模型的属性上的 MaxLength 属性在 Entity Framework 中指定字符串的最大长度。

于 2013-02-08T17:19:18.143 回答
0

使用 StringLength 属性通知框架最大长度。您可以继续使用字符串而不是字符数组。

using System.ComponentModel.DataAnnotations;
...
[StringLength(255)]
public string PageTitle { get; set; }

在这种情况下使用 StringLength 属性可能比 MaxLength 属性更可取,因为模型验证框架也可以使用 StringLength 来验证用户输入。

于 2013-02-08T17:24:49.907 回答
0

如果注意到基本的不便足以说服您不要这样做 - 这也违反了 C#/.Net 的 API 设计指南 - 由于行为不明确(是否复制/引用)和潜在的,不建议通过 get/set 方法返回数组由于复制大型数组而影响性能。

当您重新阅读示例代码时,您将已经知道答案 - 在公共 API 中替换为坏主意,string因为char[255]它很难处理 - 您不知道如何设置它。大多数人会期望“XxxxxTitle”属性是任何类型string

如果您需要设置长度限制 - 只需在set方法中强制执行它。

于 2013-02-08T17:32:52.740 回答