-4

テーブル自体を作成するときに、特定の名前で主キーを作成する方法。

テーブル名の一部として主キーを作成し、同時に名前を付けることができるかどうかを知りたかったのです。経験豊富なすべての開発者にとってはごく普通のことのように見えますが、それでも多くの人にとっては混乱を招く可能性があります。

私は何を間違っていますか?

CREATE TABLE [dbo].[TestTable]( [ID] [int] IDENTITY(1,1) NOT NULL, [FirstName] [varchar](100) NULL) GO ALTER TABLE [dbo].[TestTable] ADD CONSTRAINT [PK_TestTable] PRIMARY KEY CLUSTERED ([ID] ASC) GO

ありがとう、マヘンドラ

4

3 に答える 3

4

foreachIEnumerableIEnumerable<T>IEnumerator、またはIEnumerator<T>(または実際には互換性のあるCurrentプロパティとMoveNext()メソッドを実装するクラスを持つオブジェクト)を実装する任意のオブジェクトを列挙します。の構文foreachは次のとおりです。

foreach (type variable in enumerable) { ... }

type新しいvariable変数の型です。(使用する既存の変数が既にある場合は、型を省略します。)

ループの本体は、列挙可能なオブジェクトごとに実行され、反復変数 (ここではvariable) には反復ごとにオブジェクトが含まれます。

forはるかに汎用的で、次のパターンに従います。

for (initial-statements; loop-condition; post-iteration-actions) {
    body
}

これは、次とほぼ同じです。

initial-statements
while (loop-condition) {
    body
    post-iteration-actions
}

for次の例のように、配列を扱うときにループが発生する場合があります。

for (int index = 0; index < array.Length; index++) {
    Console.WriteLine(array[index]);
}

これは次と同じです。

{
    int index = 0;
    while (index < array.Length) {
        Console.WriteLine(array[index]);
        index++;
    }
}

(foreachこれはより高速であるため、配列を使用することは、同様のインデックスベースの反復を使用するようにコンパイラによって最適化されることに注意してください。したがって、3 つの方法はすべて、配列を列挙するときに同等のパフォーマンスと実行時セマンティクスを持つ必要があります。)


必要に応じて、詳細情報:

foreachwhile実際には単なる構文糖衣であり、簡単にループに変換できます。

foreach (object x in y) {
    Console.WriteLine(x);
}

これは実際には次のことを意味します。

var enumerator = y.GetEnumerator();
try {
    object x; // See footnote 1
    while (enumerator.MoveNext()) {
        x = enumerator.Current;
        Console.WriteLine(x);
    }
} finally {
    ((IDisposable)enumerator).Dispose();
}

ただし、enumerator変数には名前がなく、隠されています。

foreach存在する理由は明らかです。今日それを使用する場合はどこでも、そうでなければ、この恐ろしく冗長なボイラープレート コードを書かなければならないでしょう。 foreach列挙子を取得し、各反復でテストMoveNext()し、列挙子の現在の値を抽出し、反復が完了した後に列挙子を破棄します。

1この変数は、C# 5 以降、実際にはループ内で意味的に宣言されています。この例は、C# 4 以前のバージョンで正確です。

于 2012-12-04T18:33:30.713 に答える
0

foreach はイテレータを使用し、for はインデックスを使用します

それで

foreach(var item in myCollection)
{
   Console.WriteLine(item);
}

for(int i = 0; i< myCollection.Count; i++)
{
    Console.WriteLine(myCollection[i]);
}

したがって、これらが PrintContent と呼ばれる関数の肉である場合、一方は IEnumerable を実装するものを取り、もう一方の引数は count プロパティを持ち、整数型のインデクサーを実装する必要があります。並べ替えとフィルターを組み合わせて使用​​すると、さらに面白くなくなります。抽象化がすべてです。PrintContent は、myCollection がどのように実装されているかを知る必要はありません。myCollection が IEnumerable を実装するだけです。

于 2012-12-04T19:05:01.183 に答える
0

foreachコレクションの上でトラバースするforために使用されますが、同じ目的で何にでも使用できます。

于 2012-12-04T18:27:29.790 に答える