2016/11/22

C#のショートサーキット評価でラムダ式の中のnullチェックを行う

nullチェック
C#6.0から導入されている null 条件演算子の新しい書き方が便利です。
null 許容型でデータを取ってくる場合などに、null 参照で落ちることを防ぐことができます。
// サンプルクラス
class Product 
{ 
 public decimal? Amount { get; set; } 
 public string Name { get; set; } 
 
} 
 
// どっかに記述
var products = new List(); 
products.Add(new Product() { Name = "ほげほげガム", Amount = 98, }); 
products.Add(new Product() { Name = "ほげほげガム・プレミアム", Amount = 298, }); 
products.Add(new Product() { Name = "ほげほげガム・サンプル", Amount = null, }); 
products.Add(null); 

// これだと null を参照して例外になる 
// var total = products.Sum(x => x.Amount); 
 
// total = 396 
var total = products.Sum(x => x?.Amount ?? 0); 

2016/11/21

2回POSTされてしまう現象にハマる

2回POSTされてしまう
ASP.NET MVC で、ページ内に配置した Button タグに対してイベントハンドラでクリックイベントを付け、Action を呼び出すようにしていたのですが、Action が 2 回呼ばれる現象に悩まされた。

調べてみると、Button タグというのは type を指定しない場合は submit であるため、クリックイベントの後に submit イベントも走ってしまっていたようだ。

Button タグを汎用的に使用したい場合、 type=button とする。
もちろん単純に submit したい場合はそのままで良い。

2016/11/20

SQL Serverで直前のuniqueidentifierを取得

SQL Serverで直前のuniqueidentifierを取得

SQLServer で、自動インクリメント設定をした uniqueidentifier に対して Insert を発行後、SELECT SCOPE_IDENTITY() を実行しても NULL が返ってきて ID が取得できませんね。

Returning ID of new row when ID is uniqueidentifier
http://stackoverflow.com/questions/32405923/returning-id-of-new-row-when-id-is-uniqueidentifier

以下のようにして、明示的に用意した値をセットする方法しかないようです。
DECLARE @newGuid TABLE(newValue UNIQUEIDENTIFIER); 
 
INSERT INTO hoge (hoge_name) 
OUTPUT inserted.hoge_id INTO  @newGuid(newValue ) 
values ('ほげ') 
 
SELECT @id = newValue FROM @newGuid

2016/11/19

C#でGuidを比較する方法

C#でGuidを比較する
C# で GUID を扱う際、new Guid() でインスタンスを生成すると、空(ゼロのみで構成)の GUID になります。
これに対して、Guid.NewGuid() は新しい GUID を生成します。

以下のように比較できます。
var guid1 = new Guid(); 
if (guid1 == new Guid()) 
{ 
    guid1 = Guid.NewGuid(); 
} 
 
// 比較する際は、Guid.Empty でも良い。こちらのほうが見た目的にもわかりやすい。 
 
var guid1 = new Guid(); 
if (guid1 == Guid.Empty) 
{ 
 guid1 = Guid.NewGuid(); 
} 

2016/11/16

TypeScriptのto have a typedefの修正方法

TypeScript の to have a typedef の修正方法
TypeScript で静的コード分析を行った際に大量に出がちな "to have a typedef" ですが、これは変数の宣言時に型を指定する必要があるという意味です。
var hoge = "ほげ"; 
alert(hoge); 
typedef expected variable-declaration: 'hoge' to have a typedef
// これなら警告が消えます。 型の定義をしなければいけないのです。
var hoge: string = "ほげ";

2016/11/15

TypeScriptの型変換

TypeScriptの型を変換します
TypeScript で文字から数値、数値から文字へ変換する方法です。

// 数値へ変換する 
var hoge = +$("#Hogebox").text(); 
// 2 
alert(hoge++); 

// 文字列へ変換する 
// 21 
alert(hoge.toString() + 1);
Related Posts Plugin for WordPress, Blogger...