0

C#.NET プロジェクト用に Entity Framework モデル (CODE FIRST) を準備しています。使用可能な最大ビットと最小ビット以外の長さの制限がない文字列として PageTitles を保存することに気づきました。

文字列の長さが 255 文字で、それを超えることがないことがわかっている場合、文字列を新しい char[255] として宣言できると仮定しました。

文字列の代わりに char を使用することの欠点は何ですか。文字列の代わりに 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?
    }
}

文字列のサイズを制限する方法はありますか?

---------------回答済み---------------------

これは私のコードです:

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[]文字列として操作する場合は a を使用しないでください。なんで?Beacusestringには、文字配列を使用すると利用できない便利なメソッドがたくさんあります。文字配列のパフォーマンス上の利点は、あったとしてもごくわずかです。

于 2013-02-08T17:18:38.790 に答える
1

文字列が必要なものに文字列を渡すと、文字列を永遠に呪うことになるので、文字列を文字として保存しません。

モデル ファーストのデザイナーを使用するか、Code First モデルのプロパティで MaxLength 属性を使用して、Entity Framework の文字列の最大長を指定できます。

于 2013-02-08T17:19:18.143 に答える
1

編集: DamienG が指摘したように、これはコードが最初の場合にのみ機能します。

これを探していますか?

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

参照された dll: アセンブリ System.ComponentModel.DataAnnotations.dll

参照された名前空間: namespace System.ComponentModel.DataAnnotations

于 2013-02-08T17:19:02.167 に答える
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 に答える