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

时间:2013-02-08 17:15:03

标签: c# string entity-framework

我正在为我的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; }
    }
}

5 个答案:

答案 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方法中强制执行。