6

私が C# で見たいのは、タプルに関するより良い構文です。

var rgb = (1.0f, 1.0f, 1.0f);
// Inferred to be Tuple<float, float, float>
// Translated to var rgb = Tuple.Create(1.0f, 1.0f, 1.0f)

var x, y, z = rgb;

// Translated to:
//    float x = rgb.Item1;
//    float y = rgb.Item2;
//    float z = rgb.Item3;

これを禁止する、または達成するのが難しすぎる/非現実的である C# 言語には何かありますか? おそらく、これと直接衝突する他の言語機能がありますか?

これが Microsoft のレーダーにあるのか、それとも C# に対する彼らのビジョンと一致するのか、理論的に明らかな障害があるかどうかを尋ねているわけではないことに注意してください。

編集 他の CLI 言語の例をいくつか示します

// Nemerle - will use a tuple type from a language specific runtime library
def colour = (0.5f, 0.5f, 1.0f);
def (r, g, b) = colour;

// F# - Will use either a library type or `System.Tuple` depending on the framework version.
let colour = (0.5f, 0.5f, 1.0f)
let (r, g, b) = colour

// Boo - uses CLI array
def colour = (0.5, 0.5, 1.0)
def r, g, b = colour

// Cobra - uses CLI array
var colour = (0.5, 0.5, 1.0)
var r, g, b = colour

配列を使用することは良い妥協案のように思えるかもしれませんが、型を混在させると制限になります。let a, b = (1, "one")F# または Nemerle はTuple<int, string>. Boo または Cobra では、これによりobject[].

タプルのEdit2 言語サポートが C# 7 に追加されました - https://www.kenneth-truyers.net/2016/01/20/new-features-in-c-sharp-7/

4

3 に答える 3

4

あなたの場合、最後の変数にのみ値を割り当て、他の2つは指定された型のデフォルト値を想定しているため、明らかに設計上の問題です。

var x, y, z = rgb;

したがって、何であってrgbも、 zのみが割り当てられます。この動作を変更すると、その行で何が起こっているのかが完全に不明確になります。

  • すべての変数への代入
  • 最後の 1 つだけに代入

ここで明確な決定を下さないと、代入演算子の右側の型に基づいて異なる動作が発生します。ある場合は、宣言と代入がデフォルト値を行い、別の場合は宣言と特定の値への代入になります。

于 2013-09-10T12:37:20.957 に答える