- - PR -
null値を戻すプロパティ
1
| 投稿者 | 投稿内容 | ||||
|---|---|---|---|---|---|
|
投稿日時: 2002-08-26 20:42
初めて投稿します。よろしくお願いします。
現在、C#であるクラスをコーディングしています。 例えば、顧客を表すクラスで、最新の売上日を取得するプロパティを実装する場合など ですが、顧客によっては、売上データが存在しない場合もあり、その場合は特定の日付を 戻す事ができません。 このような場合、以下のようにnull値を戻すようにしたいのですが、当然コンパイル エラーとなってしまいます。 -----------------<SAMPLE>--------------------- public class customer { public DateTime LatestOrderDate { : : (DBからのデータ取得) : : if (売上データがあったら) return (売上日) else reuturn null; } } ---------------------------------------------- そもそも、このようなスタイルで実装しようとすること自体が良くないので しょうか? 皆さんはこの様な場合は、どうしていますか? お知恵を拝借できたら幸いです。 | ||||
|
投稿日時: 2002-08-27 03:27
Exceptionではいけないのでしょうか?
| ||||
|
投稿日時: 2002-08-27 09:47
DateTimeはクラスではなく構造体なので値型になります。
従って、nullという概念はありません。必ず値をもつので、値の内容で判断するしかありません。 例えば、売上データが存在しない場合は値がDateTime.MinValueになるとか。 もしくは、どうしてもnullを返したければ、戻り値をobject型などにします。 しかし、この方法だと、メソッドの戻り値を受け取るときに、まずnullかどうかを判断し、nullでなければDateTime型でキャストして、DateTime型の変数に代入する必要があります。 どっちが使いやすいかというと、毎回キャストするのは面倒なので、値で判断したほうがよいと思います。 | ||||
|
投稿日時: 2002-08-27 13:18
一票++; というか、「売上日」って属性は「売上」オブジェクトが持ってるもんでは? なので、「顧客」は LatestOrder() とかのメソッドで最新の「売上」オブジェクトを返せばよろしいかと。 ※ 「いまここで欲しいのは売上日だけだ。 余計なデータまで持ってくるのは性能にかかわる!」と気にする人もいるでしょうが、まずはきちんとモデリングすることです。 性能が実際に問題になったときには、「売上」オブジェクトのなかでキャッシュしたり、データの取得を遅延させたりするテクニックで、たいがいは切り抜けられるのですから。 | ||||
|
投稿日時: 2002-08-28 19:00
確かにご指摘の通り、売上日は顧客オブジェクトが持つべき物ではありませんね。 モデリングが根本的に甘くてお恥ずかしいです もう一度、このあたりをきちんと検討しています。 皆さんご意見ありがとうございました。 | ||||
1
