fc2ブログ
C#でリフレクションを使用するためのサンプルプログラムの作成
 C#でプログラムを作成していると、まれにクラス名を使用して動的にインスタンスを生成し実行したい時があります。その時のサンプルコードを作成してみました。アセンブリからどのようにしてクラスタイプを抽出するのかがポイントになっています。
 


 つくったサンプルは、HomePageにもまとめています。


テーマ:普通の日記 - ジャンル:アフィリエイト

paiza.ioを使用したサンプルプログラムの作成
 プログラム言語は様々ありますが、その勉強をするために都度(自分のPCに)環境を構築するのはどうかなと思っていて、Web上で簡単なプログラムを手軽につくれたらよいなと思っていました。

 そんな中見つけたのがpaiza.ioです。
 C#,Java,Pythonなど、20以上の言語に対応しています。独自にライブラリは追加できないようなので、なんでもできるわけではないですが、基本的な確認であれば対応できそう。つくったコードは下記のような感じでWebサイトやblogに埋め込むことができるのも魅力的。



 つくったサンプルは、HomePageにまとめていきたい。

テーマ:普通の日記 - ジャンル:アフィリエイト

.net MVCで < とかを入力可能にする
 .net MVCでは、3.0以降、ブラウザからの入力データによる脆弱性が発生しないよう、既定の状態では <や > などの入力ができないよう制御が入っているようです。

 状況にもよるのですが、これらの文字を入力する必要が出る場合は多く、解除が必要な局面も多く出てきます。ここではその方法について備忘録として簡単に記載しておきたいと思います。

・web.configで無効化する
下記のように requestValidationModeを2.0に設定することで無効化する
<system.web>
  <httpRuntime requestValidationMode="2.0" />
</system.web>

・Global.asax(フィルタの設定かもしれない)で無効化する
 下記のフィルタ設定を追加する
filters.Add(new ValidateInputAttribute(false));

 本記事記載に当たっては、このネット上の記事を参考にしました。
 上記記載の両方の設定が必要か?など調べ切れていない部分あります。将来的にこれらの内容は、にてまとめ記事を作りたいと思っていますが、まずは、これはと思ったものを備忘録として記録することにしました。

【.net MVC】

テーマ:ひとりごと - ジャンル:アフィリエイト

History apiを使用したブラウザ戻るの禁止
 Webベースのシステムを作る場合、ブラウザの戻るボタンの使用を禁止したい場合も多く出てきます。
 昔は大変な思いをしてイベントを操作した気がしますが、今はHistory APIをうまく使用することで、簡下記のようなコードを使用する単に実装できるようです。

if (history && history.pushState && history.state !== undefined) {
history.pushState(null, null, null);
$(window).on("popstate", function (event) {
if (!event.originalEvent.state) {
history.pushState(null, null, null);
return;
}
});

知っておくとすごく便利。
Qiitaの記事「jQueryでブラウザの戻るボタンを禁止する」を参考にさせていただきました。

【Javascript】

テーマ:ひとりごと - ジャンル:アフィリエイト

C#でオブジェクトのパブリックプロパティを簡単コピー
 特にMVCなどを使っていると、各オブジェクトのプロパティを連携するオブジェクトのプロパティに詰め替える必要が多く出てきます。
 オブジェクトごとに専用の詰め替えメソッドを用意してもよいのですが、そのメソッドの作成にかけるためをなるべく小さくしないと、詰め替え処理を作るだけで時間を浪費してしまします。
 この処理を簡単にするための方法を調査したので、まとめておきます。

[C#のプロパティコピークラスサンプル】



public static class PropertyCopier
{
public static T CopyTo(object src, T dest)
{
if (src == null || dest == null) return dest;
// コピー元のPublicなインスタンス属性(読み書き可能)を抽出
var srcProperties = src.GetType().GetProperties(
       System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance
   ).Where(p => p.CanRead && p.CanWrite);
// コピー先のPublicなインスタンス属性(読み書き可能)を抽出
var destProperties = dest.GetType().GetProperties(
       System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance)
    .Where(p => p.CanRead && p.CanWrite);
// LINQのJOINを使用して属性名とタイプが一致するもので、コピー元の属性をキーとしたプロパティを作成
var properties = srcProperties.Join(
        destProperties,
        p => new { p.Name,p.PropertyType},
        p => new { p.Name, p.PropertyType },
        (p1, p2) => new { p1, p2 });
// 作成プロパティを使用してコピー先の属性値にコピー元の属性値をコピー
foreach (var property in properties)
property.p2.SetValue(dest, property.p1.GetValue(src));
return dest;
}
}




なお、本内容の確認にあたっては、rksoftwareの記事「異なる型のオブジェクトに同じ名前のプロパティの値を全てセットする」を引用させていただきました。

C#の場合はこの形が多いと思いますが、Javaの場合は、BeanUtils#copyProperties()が用意されているようです。使い方は婿入りエンジニアさんの記事「[Java最強関数] BeanUtils.copyPropertiesのすゝめ」まとめられていました。

【C#】【Java】

テーマ:ひとりごと - ジャンル:アフィリエイト

copyright © 2023 koblogx さんのブログ all rights reserved.
Powered by FC2ブログ.