如果我知道一个字符串的长度,我应该将其声明为具有特定长度的字符吗

本文关键字:声明 字符 我知道 如果 字符串 一个 我应该 | 更新日期: 2023-09-27 17:58:36

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

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

使用char而不是字符串的缺点是什么。使用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; }
    }
}

如果我知道一个字符串的长度,我应该将其声明为具有特定长度的字符吗

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

EDIT:正如DamienG所指出的,这只在代码优先的情况下有效。

你在找这个吗?

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

引用的dll:装配系统.ComponentModel.DataAnnotations.dll

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

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

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

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

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

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

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

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

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