任何人都可以看看这个并告诉我我做错了什么?我在实现GetEnumerator方法时遇到了问题,我已经找到了让IDE创建所有方法的方法,这样我就可以学习如何覆盖它们。任何人都可以帮助完成ProductCollection类,以便我能更好地理解它。
using System;
using System.Linq;
using System.Collections;
using System.Collections.Generic;
/// <summary>
/// Product
/// </summary>
[Serializable]
public class Product
{
//0 _ItemNumber = null;
//1 _Title = null;
//2 _Author = null;
//3 _ISBN = null;
//4 _ItemMessage = null;
//5 _ISBNEAN = null;
//6 _SystemName = null;
//7 _ItemCategory = null;
//8 _AccessService = null;
//9 _AlternateItem = null;
//10 _FullTitle = null;
//11 _SalesAnalysisCode = null;
//12 _SACSummaryCode = null;
//13 _OwningOrganization = null;
//14 _ProductManager = null;
//15 _ProductFormat = null;
//16 _DefaultWarehouse = null;
//17 _ItemStatusCode = null;
//18 _AccessType = null;
//19 _SubstitutionReason = null;
//20 _Saleable = null;
//21 _OKToBackOrder = null;
//22 _Taxable = null;
//23 _ExcludeShipping = null;
//24 _Commissionable = null;
//25 _Package = null;
//26 _Royalty = null;
//27 _PrintOnDemand = null;
//28 _AllowDescriptionOverride = null;
private string[] _Product = new string[29];
/// <summary>
/// Advantage Product Object
/// </summary>
public Product()
{
}
public string Title
{
get
{
return _Product[0];
}
set
{
_Product[0] = value;
}
}
public string Author
{
get
{
return _Product[0];
}
set
{
_Product[0] = value;
}
}
public string ItemNumber
{
get
{
return _Product[0];
}
set
{
_Product[0] = value;
}
}
public string ISBN
{
get
{
return _Product[0];
}
set
{
_Product[0] = value;
}
}
public string ItemMessage
{
get
{
return _Product[0];
}
set
{
_Product[0] = value;
}
}
public string ISBNEAN
{
get
{
return _Product[0];
}
set
{
_Product[0] = value;
}
}
public string AccessService
{
get
{
return _Product[0];
}
set
{
_Product[0] = value;
}
}
public string SystemName
{
get
{
return _Product[0];
}
set
{
_Product[0] = value;
}
}
public string ItemCategory
{
get
{
return _Product[0];
}
set
{
_Product[0] = value;
}
}
public string AlternateItem
{
get
{
return _Product[0];
}
set
{
_Product[0] = value;
}
}
public string FullTitle
{
get
{
return _Product[0];
}
set
{
_Product[0] = value;
}
}
public string SalesAnalysisCode
{
get
{
return _Product[0];
}
set
{
_Product[0] = value;
}
}
public string SACSummaryCode
{
get
{
return _Product[0];
}
set
{
_Product[0] = value;
}
}
public string OwningOrganization
{
get
{
return _Product[0];
}
set
{
_Product[0] = value;
}
}
public string ProductManager
{
get
{
return _Product[0];
}
set
{
_Product[0] = value;
}
}
public string ProductFormat
{
get
{
return _Product[0];
}
set
{
_Product[0] = value;
}
}
public string DefaultWarehouse
{
get
{
return _Product[0];
}
set
{
_Product[0] = value;
}
}
public string ItemStatusCode
{
get
{
return _Product[0];
}
set
{
_Product[0] = value;
}
}
public string AccessType
{
get
{
return _Product[0];
}
set
{
_Product[0] = value;
}
}
public string SubstitutionReason
{
get
{
return _Product[0];
}
set
{
_Product[0] = value;
}
}
public string Saleable
{
get
{
return _Product[0];
}
set
{
_Product[0] = value;
}
}
public string OKToBackOrder
{
get
{
return _Product[0];
}
set
{
_Product[0] = value;
}
}
public string Taxable
{
get
{
return _Product[0];
}
set
{
_Product[0] = value;
}
}
public string ExcludeShipping
{
get
{
return _Product[0];
}
set
{
_Product[0] = value;
}
}
public string Commissionable
{
get
{
return _Product[0];
}
set
{
_Product[0] = value;
}
}
public string Package
{
get
{
return _Product[0];
}
set
{
_Product[0] = value;
}
}
public string Royalty
{
get
{
return _Product[0];
}
set
{
_Product[0] = value;
}
}
public string PrintOnDemand
{
get
{
return _Product[0];
}
set
{
_Product[0] = value;
}
}
public string AllowDescriptionOverride
{
get
{
return _Product[0];
}
set
{
_Product[0] = value;
}
}
public string[] ProductArray
{
get
{
return _Product;
}
set
{
_Product = value;
}
}
}
/// <summary>
///
/// </summary>
public class ProductCollection : IDictionary<int, Product>
{
private Dictionary<int, Product> dictionaryProduct;
public ProductCollection(int numberOfItem)
{
dictionaryProduct = new Dictionary<int, Product>(numberOfItem);
}
void IDictionary<int, Product>.Add(int productKey, Product productValue)
{
dictionaryProduct.Add(productKey, productValue);
}
bool IDictionary<int, Product>.ContainsKey(int productKey)
{
return dictionaryProduct.ContainsKey(productKey);
}
ICollection<int> IDictionary<int, Product>.Keys
{
get
{
return dictionaryProduct.Keys;
}
}
bool IDictionary<int, Product>.Remove(int productKey)
{
return (dictionaryProduct.Remove(productKey));
}
bool IDictionary<int, Product>.TryGetValue(int productKey, out Product productValue)
{
return (dictionaryProduct.TryGetValue(productKey, out productValue));
}
ICollection<Product> IDictionary<int, Product>.Values
{
get
{
return dictionaryProduct.Values;
}
}
Product IDictionary<int, Product>.this[int productKey]
{
get
{
return dictionaryProduct[productKey];
}
set
{
dictionaryProduct[productKey] = value;
}
}
void ICollection<KeyValuePair<int, Product>>.Add(KeyValuePair<int, Product> productItem)
{
throw new NotImplementedException();
}
void ICollection<KeyValuePair<int, Product>>.Clear()
{
dictionaryProduct.Clear();
}
bool ICollection<KeyValuePair<int, Product>>.Contains(KeyValuePair<int, Product> productItem)
{
return (dictionaryProduct.Contains(productItem));
}
void ICollection<KeyValuePair<int, Product>>.CopyTo(KeyValuePair<int, Product>[] productArray, int arrayIndex)
{
throw new NotImplementedException();
}
int ICollection<KeyValuePair<int, Product>>.Count
{
get
{
return dictionaryProduct.Count;
}
}
bool ICollection<KeyValuePair<int, Product>>.IsReadOnly
{
get
{
throw new NotImplementedException();
}
}
bool ICollection<KeyValuePair<int, Product>>.Remove(KeyValuePair<int, Product> productItem)
{
throw new NotImplementedException();
}
IEnumerator<KeyValuePair<int, Product>> IEnumerable<KeyValuePair<int, Product>>.GetEnumerator()
{
throw new NotImplementedException();
}
public IEnumerator<KeyValuePair<int, Product>> GetEnumerator()
{
throw new NotImplementedException();
}
IEnumerator IEnumerable.GetEnumerator()
{
throw new NotImplementedException();
}
}
经过一周多的时间,我有一个产品的自定义字典类对象,可以绑定到没有强制转换的数据源。有没有其他人看到问题或方法使这更好?
using System;
using System.Linq;
using System.Collections;
using System.Collections.Generic;
[Serializable]
public class Product
{
// 0 _ItemNumber = null;
// 1 _Title = null;
// 2 _Author = null;
// 3 _ItemNumber = null;
// ..etc
private string[] _Product = new string[29];
public Product()
{
}
public string Title
{
get
{
return _Product[1];
}
set
{
_Product[1] = value;
}
}
public string Author
{
get
{
return _Product[2];
}
set
{
_Product[2] = value;
}
}
public string ISBN
{
get
{
return _Product[3];
}
set
{
_Product[3] = value;
}
}
public string ItemNumber
{
get
{
return _Product[4];
}
set
{
_Product[4] = value;
}
}
}
using System;
using System.Linq;
using System.Collections;
using System.Collections.Generic;
/// <summary>
///
/// </summary>
public class ProductCollection : DictionaryBase, IEnumerable
{
public ProductCollection this[int productKey]
{
get
{
return ((ProductCollection)(Dictionary[productKey]));
}
set
{
Dictionary[productKey] = value;
}
}
public bool Contains(Product objectProduct)
{
return Dictionary.Contains(objectProduct);
}
public void Add(Product objectProduct)
{
Dictionary.Add(objectProduct.ItemNumber, objectProduct);
}
public void Remove(int productKey)
{
Dictionary.Remove(productKey);
}
IEnumerator IEnumerable.GetEnumerator()
{
foreach (Product productObject in this.Dictionary.Values)
{
yield return productObject;
}
}
}
protected void Page_Load(object sender, EventArgs e)
{
Product objectProduct = new Product();
objectProduct.Title = "Hello Title";
objectProduct.Author = "Hello Author";
objectProduct.ISBN = "Hello ISBN";
objectProduct.ItemNumber = "Hello ItemNumber";
ProductCollection productCollection = new ProductCollection();
productCollection.Add(objectProduct);
rpProducts.DataSource = productCollection;
rpProducts.DataBind();
}
<asp:Repeater ID="rpProducts" runat="server">
<ItemTemplate>
<%# DataBinder.Eval(Container.DataItem, "Title") %>
<br />
<%# DataBinder.Eval(Container.DataItem, "Author") %>
</ItemTemplate>
</asp:Repeater>
答案 0 :(得分:2)
尝试将此添加到ProductEnumerator
public IEnumerator IEnumerable.GetEnumerator()
{
return (IEnumerator) GetEnumerator();
}
我认为这是抱怨,因为你还没有完全定义IEnumerable接口。