2012年6月28日木曜日

LINQ to XMLと属性とnullと

最近,LINQ to XMLを使う機会が多い.で,こんな感じのコードを書く.

XDocument document = XDocument.load("foo.xml");
var elements = from e in document.Descendants("bar")
                        where e.Attribute("hoge").Value == "foobar"
                        select e;

すると,適当な属性が無い場合null参照で怒られる.で、こう書き換えていた.


XDocument document = XDocument.load("foo.xml");
var elements = from e in document.Descendants("bar")
                        where e.Attribute("hoge") != null && e.Attribute("hoge").Value == "foobar"
                        select e;

でもこれ冗長だなぁ、と思っていたわけで.調べてみると、文字列へのキャストをした方が良い感じ.

XDocument document = XDocument.load("foo.xml");
var elements = from e in document.Descendants("bar")
                        let hoge = (string)e.Attribute("hoge")
                        where hoge != null && hoge == "foobar"
                        select e;

で、ふと思ったのが、文字列型の変数がnullの場合,比較したら落ちるのかな,と.

string a = null;
string b = "hello";
if(a != b){
    Console.WriteLine("not same");
}

ちゃんと比較できるっぽいので,こうすればいちいちnullチェックいらないんじゃね,ということで

XDocument document = XDocument.load("foo.xml");
var elements = from e in document.Descendants("bar")
                        let hoge = (string)e.Attribute("hoge")
                        where hoge == "foobar"
                        select e;

と,ここにたどり着いた.

0 件のコメント:

コメントを投稿