我正在为我的C#.NET项目准备一个实体框架模型(CODE FIRST)。我突然意识到我将把PageTitles存储为字符串,除了可用的最大和最小位之外没有长度限制。
我假设如果我知道一个字符串长度为255个字符且永远不会超过该字符串,我可以将我的字符串声明为新字符[255]。
使用char而不是string的缺点是什么。 使用char代替字符串有什么好处。
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?
}
}
是否有某种限制字符串大小的方法?
--------------- --------------------- ANSWERED
这是我的代码:
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; }
}
}
答案 0 :(得分:6)
不,当您打算以字符串形式对其进行操作时,不应使用char[]
。为什么? Beacuse string
有许多有用的方法,如果您使用字符数组,将无法使用这些方法。字符数组的性能优势(如果有的话)将非常小。
答案 1 :(得分:1)
编辑:正如DamienG指出的那样,这只适用于代码优先的情况。
你在找这个吗?
[MaxLength(255)]
public string PageTitle { get; set; }
参考dll: 汇编System.ComponentModel.DataAnnotations.dll
引用的命名空间:
namespace System.ComponentModel.DataAnnotations
答案 2 :(得分:1)
我不会将字符串存储为字符,因为当你将它们传递给想要字符串的东西时,你会永远诅咒。
您可以使用设计器为模型优先或在代码优先模型的属性上使用MaxLength属性为Entity Framework中的字符串指定最大长度。
答案 3 :(得分:0)
使用StringLength属性向框架通知最大长度。您可以继续使用字符串而不是字符数组。
using System.ComponentModel.DataAnnotations;
...
[StringLength(255)]
public string PageTitle { get; set; }
在这种情况下使用StringLength属性可能比MaxLength属性更可取,因为模型验证框架也可以使用StringLength来验证用户输入。
答案 4 :(得分:0)
如果基本的不便足以说服你不要这样做 - 它也违反了C#/的API设计指南。由于行为不清楚,不建议通过get / set方法返回数组(是复制/参考)以及由于复制大型阵列而可能产生的性能影响。
当您重新阅读示例代码时,您已经知道了答案 - 在公共API中将string
替换为char[255]
是不明智的,因为它很难处理 - 你不要不知道如何设置它。大多数人都希望“XxxxxTitle”属性属于任何类型string
。
如果您需要设置长度限制 - 只需在set
方法中强制执行。