問題タブ [nullable]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
5 に答える
621 参照

c# - Null 許容変数型 - .value メンバー

私は疑問に思っていました-変数自体を呼び出すだけでなく、null 許容型で .Value メンバーを使用したいのはいつですか?

例えば。

ブール?b = 真;

b を使用する代わりに、b.Value を使用して値を取得するのはなぜですか? .Value 呼び出しはどのような利点または機能を追加しますか?

0 投票する
4 に答える
14254 参照

vb.net - vb.netにnull許容ブール値のようなものはありますか

私は新しいMVCブックを作成していますが、もちろん、サンプルはすべて通常どおりc#になっています。

次のようなコード行があります

著者は、疑問符は、これがtrue、falseの可能性があるnull許容(トライステート)ブールであることを示していると説明しています。またはnull。(新しいC#3規則。)

vb.netはこのような規則をサポートしていますか?確かに、vb.netでブール値を宣言でき、明示的にNull(vb.netではNothing)に設定できます。

違いは何ですか。C#にはそれ以上のものがありますか?利点は?

0 投票する
2 に答える
264 参照

.net - Nullable型のプロパティの検証を行う必要がありますか

カスタム構成セクション(System.Configuration.ConfigurationSectionを継承)を作成していますが、NullableintであるConfigurationPropertyの値の検証を行う必要があるかどうか疑問に思っています。つまり、これを行う必要がありますか?

または、次のようなことを行うことはできますか?

それとも、一緒にもっと良い方法がありますか?

前もって感謝します。

0 投票する
3 に答える
2079 参照

vb.net - VB.NET 3.5; コンパイラがnull許容型(Double?など)について「エラーBC30037:文字が無効です」と文句を言います。

error BC30037: Character is not valid.Visual Studioは、VB.NET 3.5プロジェクトのいずれかでnull許容演算子を使用している場合は常に、(Webサイトの検証中に)「」をスローし始めました。これは数ヶ月前に同僚に起こりましたが、彼はそれをどのように修正したかを覚えていません。

たとえば、のすべてのインスタンスをに変更するDouble?Nullable(Of Double)、正常にコンパイルされ、同じソリューション内の他のプロジェクトでのnullablesの他の使用法は引き続き正常に機能します。

ソリューションをクリーンアップし、Visual Studioを閉じ、一時ASP.NETファイルを削除し、VisualStudioを再起動してみました。

他に試すことができるものはありますか?

添加:

デリゲート構文も失敗していると言いたいと思いました。私はこのコードを持っています:

paymentsですIList(Of Payment)Paymentオブジェクトには、と呼ばれる文字列プロパティがありますCode。Visual Studioには、そのコード行が何をしているのかわからないと思わせる検証エラーや目に見えるものはありません。Intellisenseは問題なく動作しますが、コンパイラは構文に適合しています。次の2つのエラーは、それぞれ上記の2行のコードに付随しています。

Visual Studioには、知っているはずのVB.NET3.5の機能がないように見えます。

0 投票する
5 に答える
270 参照

c#-3.0 - C#3.0でC#コードのこの行を書くためのより良い方法はありますか?

私は次のように宣言されたプロパティを持っています:

この値を文字列として別のメソッドに渡す必要があるため、これを行う唯一の方法は次のとおりです。

メソッドに渡される同様のプロパティが多数ある場合、これは非常に厄介に見えます。

これを書くためのより良い、より簡潔な方法があるかどうか誰かが知っていますか?

ああ、そして誰かがこの質問にもっと適切なタイトルを考えることができるなら、それを自由に変えてください...

0 投票する
5 に答える
699 参照

vb.net - null 許容として宣言された構造体のメンバーが表示されない

VB.NET で構造体を null 許容型にすると、構造体のメンバーが表示されないのはなぜですか?

例:

0 投票する
2 に答える
47210 参照

c# - C# コードはコンパイルされません。null と int の間の暗黙的な変換はありません

重複の可能性:
Null 許容型と三項演算子: なぜ `? 10 : null`禁止?

なぜこれが機能しないのですか?有効なコードのようです。

これをどのようにコーディングすればよいですか?このメソッドは Nullable を取ります。ドロップダウンで文字列が選択されている場合は、それを int に解析する必要があります。それ以外の場合は、メソッドに null を渡します。

0 投票する
4 に答える
3911 参照

c# - null許容型をシリアル化する正しい方法は何ですか?

クラスの 1 つで IXMLSerializable を実装しています。null 許容の数値プロパティがいくつか含まれています (int? double? など)。

IXMLSerializable を介してこれらをシリアル化/シリアル化する正しい方法は何ですか? これが私が今していることです。これは機能しますが、明らかに正しい方法ではないようです。

更新: IXmlSerializable を実装している理由について、少し背景を説明するように求められました。私は床のコレクションを表すクラスが必要な建築設計のプログラムに取り組んでいます。各フロアには、 Floor.Areaエリア、Floor.Heightなどのプロパティがあります。ただし、フロアの高さは、その下のフロアの高さの合計によって定義されます。したがって、Floor.Heightプロパティが変更されるか、FloorCollectionが変更されるたびに、フロアの高さが再計算されます。

シリアル化する必要がある FloorCollectionクラスは、BindingList から継承しています。このクラスを直接シリアル化しようとすると、フロアのコレクションがシリアル化されますが、クラスのプロパティやフィールドはシリアル化されません。これに関する私の以前の投稿を参照してください。

現在、コレクション内の建物の床の最大高さ、最大上部高さ、および最小下部高さを制限する機能を追加しようとしています。したがって、これらの制限を表すために nullable double を使用しています。null 値は無制限を意味します。標高プロパティは、正、負、またはゼロにすることができます。そのため、制限がない場合を識別する別の状態 null が必要です。

標高/高さの制限があるかどうかを識別する別のブール値と、それが有効な場合に制限が何であるかを識別する通常の double プロパティを持つ方が全体的に簡単かもしれないと考えています。

0 投票する
5 に答える
64859 参照

.net - XmlSerializerを使用して、空のxml属性値をnull許容のintプロパティに逆シリアル化します

サードパーティからxmlを取得し、それをC#オブジェクトに逆シリアル化する必要があります。このxmlには、整数型または空の値の属性が含まれている場合があります:attr =” 11”またはattr =””。この属性値をnull許容整数型のプロパティに逆シリアル化したい。ただし、XmlSerializerはnull許容型への逆シリアル化をサポートしていません。次のテストコードは、InvalidOperationException{"タイプ'TestConsoleApplication.SerializeMe'を反映するエラーが発生しました。"}でXmlSerializerの作成中に失敗します。

'Value'プロパティのタイプをintに変更すると、逆シリアル化はInvalidOperationExceptionで失敗します。

XMLドキュメント(1、16)にエラーがあります。

空の値を持つ属性をnull許容型に(nullとして)逆シリアル化すると同時に、空でない属性値を整数に逆シリアル化する方法を誰かがアドバイスできますか?これには何かトリックがありますので、各フィールドの逆シリアル化を手動で行う必要はありません(実際には多くのフィールドがあります)?

ahsteeleからのコメント後に更新:

  1. Xsi:nil属性

    私の知る限り、この属性はXmlElementAttributeでのみ機能します。この属性は、子要素であろうと本文テキストであろうと、要素にコンテンツがないことを指定します。しかし、XmlAttributeAttributeの解決策を見つける必要があります。とにかく、私はそれを制御できないので、xmlを変更することはできません。

  2. bool*指定されたプロパティ

    このプロパティは、属性値が空でない場合、または属性が欠落している場合にのみ機能します。attrの値が空の場合(attr ='')、XmlSerializerコンストラクターは失敗します(予想どおり)。

    /li>
  3. AlexScordellisによるこのブログ投稿のようなカスタムNullableクラス

    私はこのブログ投稿から私の問題にクラスを採用しようとしました:

    しかし、XmlSerializerコンストラクターはInvalidOperationExceptionで失敗します。

    タイプTestConsoleApplication.NullableIntのメンバー'Value'をシリアル化できません。

    XmlAttribute / XmlTextを使用して、IXmlSerializableを実装する型をエンコードすることはできません}

  4. 醜い代理ソリューション(私がこのコードをここに書いたことは恥ずべきことです:)):

    しかし、このようなソリューションは、クラスのコンシューマーのインターフェイスを壊してしまうため、思いつきたくありません。IXmlSerializableインターフェースを手動で実装する方がよいでしょう。

現在、Elementクラス全体にIXmlSerializableを実装する必要があるようです(これは大きいです)。簡単な回避策はありません…</ p>

0 投票する
4 に答える
10272 参照

mysql - 一意のキーにnull可能な列を持つMySQL ON DUPLICATE KEY UPDATE

当社の MySQL Web 分析データベースには、新しいアクティビティがインポートされるたびに更新される概要テーブルが含まれています。要約が以前の計算を上書きするために ON DUPLICATE KEY UPDATE を使用しますが、要約テーブルの UNIQUE KEY の列の 1 つがオプションの FK であり、NULL 値が含まれているため、問題が発生しています。

これらの NULL は、「存在せず、そのような場合はすべて同等である」ことを意味することを意図しています。もちろん、MySQL は通常、NULL を「不明であり、そのようなすべてのケースは同等ではない」という意味として扱います。

基本的な構造は次のとおりです。

各セッションのエントリを含む「アクティビティ」テーブル。それぞれがキャンペーンに属し、いくつかのエントリのオプションのフィルターとトランザクション ID を含みます。

アクティビティ テーブル内の合計セッション数の毎日のロールアップと、トランザクション ID を含むセッションの合計数を含む「概要」テーブル。これらの概要は分割され、キャンペーンと (オプションの) フィルターの組み合わせごとに 1 つずつ表示されます。これは、MyISAM を使用した非トランザクション テーブルです。

実際の集計クエリは次のようなもので、セッションとトランザクションの数をカウントアップし、キャンペーンと (オプション) フィルターでグループ化します。

filter_id が NULL の場合の要約を除いて、すべてうまく機能します。このような場合、ON DUPLICATE KEY UPDATE 句は既存の行と一致せず、毎回新しい行が書き込まれます。これは、「NULL != NULL」であるためです。ただし、一意のキーを比較するときに必要なのは「NULL = NULL」です。

回避策のアイデアや、これまでに思いついたものに対するフィードバックを探しています。これまでに考えた回避策は次のとおりです。

  1. 要約を実行する前に、NULL キー値を含むすべての要約エントリを削除します。(これが現在行っていることです) これには、集計プロセス中にクエリが実行されると、データが欠落している結果が返されるというマイナスの副作用があります。

  2. DEFAULT NULL 列を DEFAULT 0 に変更します。これにより、UNIQUE KEY を一貫して一致させることができます。これには、サマリー テーブルに対するクエリの開発が過度に複雑になるというマイナスの影響があります。これにより、多くの「CASE filter_id = 0 THEN NULL ELSE filter_id END」を使用せざるを得なくなり、他のすべてのテーブルで実際には filter_id が NULL になっているため、結合が困難になります。

  3. 「CASE filter_id = 0 THEN NULL ELSE filter_id END」を返すビューを作成し、テーブルの代わりにこのビューを直接使用します。集計テーブルには数十万行が含まれており、ビューのパフォーマンスが非常に悪いと言われています。

  4. 重複エントリの作成を許可し、要約が完了したら古いエントリを削除します。事前に削除するのと同様の問題があります。

  5. NULL に 0 を含むサロゲート列を追加し、UNIQUE KEY でそのサロゲートを使用します (実際には、すべての列が NULL でない場合は PRIMARY KEY を使用できます)。
    上記の例が単なる例であることを除けば、この解決策は妥当に思えます。実際のデータベースには半ダースのサマリー テーブルが含まれており、そのうちの 1 つには UNIQUE KEY に 4 つの null 値を許容する列が含まれています。オーバーヘッドが大きすぎるという懸念もあります。

役立つ回避策、テーブル構造、更新プロセス、または MySQL のベスト プラクティスはありますか?

編集:「nullの意味」を明確にする

NULL 列を含む要約行のデータは、そのデータ ポイントが存在しないか不明なアイテムを要約した、要約レポートの単一の「キャッチオール」行であるという意味でのみ、一緒に属していると見なされます。したがって、要約テーブル自体のコンテキスト内では、意味は「値が不明なエントリの合計」です。一方、リレーショナル テーブル内では、これらは実際には NULL の結果です。

それらをサマリー テーブルの一意のキーに配置する唯一の理由は、サマリー レポートを再計算するときに (ON DUPLICATE KEY UPDATE による) 自動更新を可能にするためです。

要約テーブルの 1 つが、回答者が指定した会社の住所の郵便番号プレフィックスによって地理的に結果をグループ化する具体的な例を使用すると、より適切に説明できます。すべての回答者が会社の住所を提供しているわけではないため、トランザクション テーブルと住所テーブルの関係はまったく正しく NULL です。このデータの要約テーブルでは、各郵便番号プレフィックスに対して行が生成され、その地域内のデータの要約が含まれます。追加の行が生成され、郵便番号のプレフィックスが不明なデータの概要が表示されます。

残りのデータ テーブルを変更して明示的な "THERE_IS_NO_ZIP_CODE" 0 値を持たせ、この値を表す ZipCodePrefix テーブルに特別なレコードを配置することは不適切です。その関係は本当に NULL です。