-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

foreach枚举任何实现IEnumerableIEnumerable<T>IEnumeratorIEnumerator<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编译器对使用 over 数组进行了优化,以使用类似的基于索引的迭代,因为这样更快。因此,在枚举数组时,所有三种方法都应该具有等效的性能和运行时语义。)


更多信息,如果你想要的话:

foreach实际上只是语法糖,可以很容易地翻译成while循环。

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可以用于任何相同目的的东西。

于 2012-12-04T18:27:29.790 回答
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 回答