[解決済み] C#7: アンダースコア( _ )とスター( * )をOut変数に入れる
質問
C#7 の新しい out variable 機能について読んでいました。 ここで . 私は2つの質問があります。
-
と書かれています。
アウトパラメータとして、"discards"も許可しています。
_
のような形で、アウト・パラメータとしての "discard"も許可しています。p.GetCoordinates(out var x, out _); // I only care about x
Q: C#7.0以前でも可能なので、これは単なる情報であって、C#7の新機能ではないのでしょう。
var _; if (Int.TryParse(str, out _)) ...
それとも、何か見落としているのでしょうか?
-
同じブログで紹介されているようにすると、私のコードはエラーになります。
~Person() => names.TryRemove(id, out *);
*
は有効な識別子ではありません。Mads Torgersenの見落としでしょうか?
どのように解決するのですか?
廃棄物 C#7では、変数が宣言されている場所であればどこでも、その名前が示すように、結果を破棄するために使用することができます。つまり、破棄はout変数で使用することができます。
p.GetCoordinates(out var x, out _);
であり、式の結果を破棄するために使われることがあります。
_ = 42;
例では
p.GetCoordinates(out var x, out _);
_ = 42;
変数はありません。
_
という変数が導入されているわけではありません。捨て札が使われるケースが2つあるだけです。
しかし、もし、識別子
_
がスコープ内に存在する場合は、ディスカードは使用できません。
var _ = 42;
_ = "hello"; // error - a string cannot explicitly convert from string to int
ただし、例外として
_
変数が out 変数として使われる場合です。この場合、コンパイラは型または
var
を無視し、廃棄として扱います。
if (p.GetCoordinates(out double x, out double _))
{
_ = "hello"; // works fine.
Console.WriteLine(_); // error: _ doesn't exist in this context.
}
の場合のみ発生することに注意してください。
out var _
または
out double _
が使用されます。ただ、使用する
out _
と書くと、既存の変数への参照として扱われます。
_
のように、スコープ内であれば、例えば
string _;
int.TryParse("1", out _); // complains _ is of the wrong type
最後に
*
という表記は、廃棄に関する議論の初期に提案されました。
が提案されましたが、放棄され、代わりに
_
が他の言語ではより一般的な表記法であるため、採用されませんでした。
.
関連
-
[解決済み】"出力タイプがクラスライブラリのプロジェクトは直接起動できない"
-
[解決済み】「入力文字列が正しい形式ではありませんでした」エラーの解決方法は?[重複しています]。
-
[解決済み】C# - パスに不正な文字がある場合
-
[解決済み】C#のequal to演算子でtextとvarcharのデータ型は互換性がない
-
[解決済み] C#がforeachで変数を再利用するのは理由があるのか?
-
[解決済み] キーワード「ref」と「out」の違いは何ですか?
-
[解決済み] ハウツー:C#でコマンドラインを実行し、STD OUTの結果を取得する
-
[解決済み] in vs ref vs out の使い分け
-
[解決済み】Type変数を使った変数のキャスティング
-
[解決済み] パラメータを指定しない TryParse
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】コンパイルエラー「未割り当てのローカル変数を使用しています」が発生したのはなぜですか?
-
[解決済み】スクリプトクラスが見つからないので、スクリプトコンポーネントを追加できない?
-
[解決済み】C#で四捨五入する方法
-
解決済み] Critical error detected c0000374 - C++ dll returns pointer off allocated memory to C# [解決済み] Critical error detected c0000374 - C++ dll returns pointer off allocated memory to C#.
-
[解決済み】バックスラッシュを含むパス文字列のエスケープシーケンスが認識されない件
-
[解決済み】クロススレッド操作が有効でない。作成されたスレッド以外のスレッドからアクセスされたコントロール
-
[解決済み】Visual studio 2019がデバッグ時にフリーズする件
-
[解決済み] 2つのリストを結合する
-
[解決済み] ...基礎となる接続は閉じられました。予期しないエラーが受信で発生しました
-
[解決済み】スレッド終了またはアプリケーションの要求により、I/O操作が中断されました。