「C#」カテゴリーアーカイブ

defineマクロ を魏実的再現できるって

defineマクロ が存在しないので、単純にはREPを書くことが出来ません。
擬似的に再現できるそうです。メモメモ
まずは以下のように定義します。

static void REP(int n, Action action) {
for (int i = 0; i < n; i++) action(i) ;
}

そして使うときには

var a = new int[]{11,22,33,44,55,66,};
int sum = 0;
for(int i = 0 ; i < a.Length; i ++) sum += i * a[i]; というfor文は、 var a = new int[]{11,22,33,44,55,66,}; int sum = 0; REP(a.Length, i => sum += i * a[i]);

続きを読む defineマクロ を魏実的再現できるって

Enumを(Javaのように)別の値を持たせるなど拡張するってメモメモ

Enumに文字列を与えたいというのは少なくなくよくある。
例えばFruits.Appleには.ToString()したら「リン ゴ」と出て欲しいなー、とか。
それならFruits.リンゴと、日本語名つければ?というのはごもっとも。
でも、同時に「林檎」とも付けたいなー、とかも 思ってしまったりするわけです。しません?Java→C#な人が一番不満に思うのはEnumのようですし(JavaのEnumは高機能!)。

例えばこんな風にかけたらいいな、って。

ヤバい、無くなる前にメモメモ

 

// こうやって属性定義するだけ!
public enum Color
{
[Japanese(“黒”), Hex(“000000”), Rgb(0, 0, 0)]
Black,
[Japanese(“白”), Hex(“FFFFFF”), Rgb(255, 255, 255)]
White,
[Japanese(“赤”), Hex(“FF0000”), Rgb(255, 0, 0)]
Red
}

続きを読む Enumを(Javaのように)別の値を持たせるなど拡張するってメモメモ

チェックデジットを計算するって

あったので無くなる前にメモメモ

チェックデジット(C/D)とは データの正確性を保つ為に使用される文字。

計算式に基づき算出されます。 ・モジュラス10/ウェイト3 → JAN、ITF等で使用。 1) 一番右側のキャラクタを奇数として全てのキャラクタを奇数位置と偶数 位置に分けています。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using static System.Console;

namespace ValidateMyNumber
{
class Program
{
static void Main(string[] args)
{
WriteLine(ValidateMyNumber(“123456789010”)); //=>False
WriteLine(ValidateMyNumber(“123456789011”)); //=>False
WriteLine(ValidateMyNumber(“123456789012”)); //=>False
WriteLine(ValidateMyNumber(“123456789013”)); //=>False
WriteLine(ValidateMyNumber(“123456789014”)); //=>False
WriteLine(ValidateMyNumber(“123456789015”)); //=>False
WriteLine(ValidateMyNumber(“123456789016”)); //=>False
WriteLine(ValidateMyNumber(“123456789017”)); //=>False
WriteLine(ValidateMyNumber(“123456789018”)); //=>True
WriteLine(ValidateMyNumber(“123456789019”)); //=>False
WriteLine(ValidateMyNumber(“023456789013”)); //=>True

ReadLine();
}

public static bool ValidateMyNumber(string mynumber)
{
if (mynumber.Length != 12)
throw new ArgumentException(“マイナンバーは12桁です”);

var digits = mynumber.Select(x => int.Parse(x.ToString())).ToArray();

var checkDigit = digits.Last();

var reminder = Enumerable.Range(1, 11)
.Select(n => digits[digits.Length – 1 – n] * (n <= 6 ? n + 1 : n – 5))
.Sum() % 11;
return checkDigit == (reminder <= 1 ? 0 : 11 – reminder);
}
}
}