如果我知道一个字符串的长度,我应该将其声明为具有特定长度的字符吗
本文关键字:声明 字符 我知道 如果 字符串 一个 我应该 | 更新日期: 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
方法中强制执行即可。