2017-06-03 12 views
0

私はデータベース内のすべてのリストを取得し、素晴らしい作品です。しかし、私が隠さなければならない情報のビットが1つあり、私が試したことに関係なく、私はそれを隠すように見えません。ViewModelのマスク文字列C#

5 *(文字列の長さにかかわらず)でマスクし、最後の4桁を表示したいと思います。

私が持っているものでこれを達成するための最良の方法はありますか?

文字列例: "SD46346" & & "ADFF3342422" & & "56 AS4566S"

コントローラ

vm.Accounts = accounts 
     .Select(s => new AdminViewModel.Account 
     { 
      Id= (s._ID.Length > 40 ? Encryptor.Decrypt(s._ID) : s._ID), 
     }).ToList(); 
    return View(vm); 

ビューモデル

public List<Account> Accounts { get; set;} 

public class Account 
{ 
    public string Id { get; set; } 
} 

私が試したこと: '/ xxxxx'アプリケーションのサーバーエラー。 StartIndexはゼロより小さくすることはできません。パラメータ名:startIndexの -

public string DisplayID 
{ 
    get 
    { 
     return string.Format("*****{0}", Id.Substring(Id.Length - 4)); 
    } 
} 

UPDATE

それが唯一の2つの文字を持っていたデータベースで失われた古いデータだった、私のコードではありませんでした。

+0

文字列のサンプルを投稿します。おそらくRegexを使うことができます。 – jdweng

+0

さて、これからやるよ – CheezStix

+0

負のインデックスを持つ部分文字列は、最後のn文字を取得するだけで、文字列の長さは必要ありません。 –

答えて

0

表示のための単純な置換の直後であれば、表示目的で使用する追加のプロパティを追加することもできます。

string ID {get;set;} 

string DisplayID 
{ 
    get 
    { 
     return string.Format("*****{0}", ID.substring(ID.Length - 4)) 
    } 
} 
+0

'/ xxxxx'アプリケーションのサーバーエラー。 StartIndexはゼロより小さくすることはできません。 パラメータ名:startIndex – CheezStix

+0

文字列の長さをチェックするのが常に良いです。あなたは4より短い文字列の長さのように見えます。 – touchofevil

0

文字列(二重引用符とアンパサンド)はわかりませんが、必要に応じてコードを変更できるはずです。

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Text.RegularExpressions; 

namespace ConsoleApplication1 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      string input = "SD46346\" && \"ADFF3342422\" && \"56-AS4566S"; 
      string pattern = @"\d{4}"; //exactly four digits in a row 
      Match match = Regex.Match(input, pattern, RegexOptions.RightToLeft); 

      string output = match.Value; 
     } 
    } 
} 
+0

出力値を私のビューにどのように引き込むのですか? – CheezStix

+0

アカウントクラスのインスタンスが必要です。 – jdweng