C# 7は配列/列挙型のデストラクチャリングが可能か?
2023-12-17 22:16:21
質問
JavaScript ES6では、このように配列を再構築することができます。
const [a,b,...rest] = someArray;
ここで
a
は配列の最初の要素です。
b
は2番目の要素、そして
rest
は残りの要素を持つ配列である。
私はC#7で、割り当て中にタプルを再構築できることを知っていますが、このような配列/列挙体の再構築に関連するものを見つけることができませんでした。
var (a,b) = someTuple;
私は
IEnumerable
で、最初と2番目の要素は変数として必要で、残りの要素は別のIEnumerableとして必要です。私は解決策を持っていますが、再構築がよりきれいに見えると感じています。
どのように解決するのですか?
C#言語の機能と完全に統合された解決策を求めるなら Evkの回答 をお使いください。これは実装の詳細をある程度隠します。それを気にしないのであれば、どちらの回答も使うことができます。
私の知る限り、それはありません。しかし、似たようなものを作るのはそれほど難しくありません。
このような拡張メソッドはどうでしょう。
public static class EX
{
public static void Deconstruct<T>(this T[] items, out T t0)
{
t0 = items.Length > 0 ? items[0] : default(T);
}
public static void Deconstruct<T>(this T[] items, out T t0, out T t1)
{
t0 = items.Length > 0 ? items[0] : default(T);
t1 = items.Length > 1 ? items[1] : default(T);
}
}
という具合に使うことができます。
int[] items = { 1, 2 };
items.Deconstruct(out int t0);
欠点は、返す項目の数だけ拡張メソッドが必要なことです。そのため、返す変数が数個以上ある場合、この方法はあまり有用ではないかもしれません。
長さのチェックやそれに関連することを省いていることに注意してください。
関連
-
[解決済み】「The breakpoint will not currently be hit」を改善するには?このドキュメントにはシンボルが読み込まれていません。" という警告はどうすれば改善されますか?
-
[解決済み】指定されたキャストが有効でない?
-
[解決済み】GDI+、JPEG画像をMemoryStreamに変換する際にジェネリックエラーが発生しました。
-
[解決済み】プログラム実行中に1秒待つ
-
[解決済み】ここで「要求URIに一致するHTTPリソースが見つかりませんでした」となるのはなぜですか?
-
[解決済み] EntityTypeにキーが定義されていないエラー
-
[解決済み】ランダムなブーリアンを生成する最速の方法
-
[解決済み】パラメータ付きRedirectToAction
-
[解決済み] C#の[Flags]Enum属性の意味とは?
-
[解決済み】C#には拡張プロパティがある?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Ajax処理で「無効なJSONプリミティブ」と表示される件
-
[解決済み] [Entity Framework 4.1でエンティティに関連オブジェクトを追加する際に、エンティティオブジェクトをIEntityChangeTracker.の複数のインスタンスから参照できない。
-
[解決済み】C#はJavaのcharAt()と同等?)
-
[解決済み] DBNullから他の型にオブジェクトをキャストすることができない
-
[解決済み] [Solved] 不正な文字列値: '\xEFxBFxBD' for column
-
[解決済み】MetadataException: 指定されたメタデータ・リソースをロードできない
-
[解決済み】HRESULTからの例外:0x800A03ECエラー
-
[解決済み] 2つのリストを結合する
-
[解決済み】エラー「必要なフォーマルパラメータに対応する引数が与えられていない」を解決する?
-
[解決済み】URLから画像をダウンロードする方法