0

我需要帮助理解这一点

在我的控制器中,我有

MembershipUserCollection usersObj = Membership.GetAllUsers();
IEnumerator<MembershipUserCollection> model = usersObj.GetEnumerator();
return PartialView(model );

我需要一个IEnumerator object迭代,但我不确定IEnumerator MembershipUserCollection.GetEnumerator()返回哪种类型。

我想将它传递IEnumerator给一个视图,我将Enumerator在其中使用它foreach

 @foreach (var membershipUser in Model.getEnumerator())
 { ... }
4

3 回答 3

4

您的问题错误地假设此代码有效:

@foreach (var membershipUser in Model.getEnumerator()) { ... }

事实上,你应该这样写:

@foreach (var membershipUser in Model) { ... }

这样一来,您的整个问题就变得没有意义了。编译器处理调用的细节GetEnumerator,并且,当您使用var关键字时,它也推断循环变量的类型。

于 2012-12-26T15:03:08.347 回答
0

foreach遍历从IEnumerable接口继承的对象,因此如果从接口MembershipUserCollection继承(并且确实如此),您可以将其传递给模型并且它应该可以工作。

MembershipUserCollection usersObj = Membership.GetAllUsers();
return PartialView(usersObj);

并且在视图中

@model System.Web.Security.MembershipUserCollection

<h2>Users</h2>
<ul>
    @foreach(var u in Model)
    {
        <li>u.UserName</li>
    }
</ul>
于 2012-12-26T14:57:39.000 回答
0

GetEnumerator() 返回一个遍历集合的枚举器。

收集必须满足以下要求:

The collection type:
    1. Must be one of the types: interface, class, or struct.
    2. Must include an instance method named GetEnumerator that returns a type, for example, Enumerator.

The type Enumerator (a class or struct) must contain:
   1. A property named Current that returns ItemType or a type that can be converted to it. The property accessor returns the current element of the collection.

有关详细信息,请参阅以下链接:http: //msdn.microsoft.com/en-us/library/system.collections.ienumerable.getenumerator.aspx

于 2012-12-26T15:35:20.340 回答