C# 泛型

liuxzh1026 2011-09-29 04:39:30
有两个类:

第一个:

internal abstract class PropertyAccessorBase<T>
{
protected PropertyAccessorBase()
{
}

public abstract object GetValue(T obj, int index);

public abstract string[] Columns { get; }
}

第二个:
using System;
using System.Collections.Generic;
using System.Runtime.CompilerServices;

internal class SinglePropertyAccessor<T> : PropertyAccessorBase<T>
{
private List<string> _columns;
private List< SinglePropertyAcccessorConvert<T>> _convers;
private MultiPropertyAccessortConvert<T> _convert;

public delegate object MultiPropertyAccessortConvert(int index, T obj);
public delegate object SinglePropertyAcccessorConvert(T obj);

public SinglePropertyAccessor()
{
this._columns = new List<string>();
this._convers = new List<SinglePropertyAcccessorConvert<T>>();
}

public SinglePropertyAccessor(string columname) : this(columname, null)
{
}

public SinglePropertyAccessor(MultiPropertyAccessortConvert<T> convert, params string[] columns)
{
this._columns = new List<string>();
this._convers = new List<SinglePropertyAcccessorConvert<T>>();
this._convert = convert;
this._columns.AddRange(columns);
}

public SinglePropertyAccessor(string columnname, SinglePropertyAcccessorConvert<T> convert)
{
this._columns = new List<string>();
this._convers = new List<SinglePropertyAcccessorConvert<T>>();
this.AddColumn(columnname, convert);
}

public SinglePropertyAccessor<T> AddColumn(string column, SinglePropertyAcccessorConvert<T> convert)
{
this._columns.Add(column);
this._convers.Add(convert);
return (SinglePropertyAccessor<T>) this;
}

public override object GetValue(T obj, int index)
{
if (((index >= 0) && (index < this._convers.Count)) && (this._convers[index] != null))
{
return this._convers[index](obj);
}
if (this._convert != null)
{
return this._convert(index, obj);
}
return obj;
}

public override string[] Columns
{
get
{
return this._columns.ToArray();
}
}
}

哪位达人给俺说一下,为啥第二个会报错,如何处理。小弟感激涕零啊。
...全文
76 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
Icedmilk 2011-09-29
  • 打赏
  • 举报
回复
你的错误很明显啊
private List< SinglePropertyAcccessorConvert<T>> _convers;
private MultiPropertyAccessortConvert<T> _convert;

public delegate object MultiPropertyAccessortConvert(int index, T obj);
public delegate object SinglePropertyAcccessorConvert(T obj);

这个类型
MultiPropertyAccessortConvert不是泛型类型
你就不可以
MultiPropertyAccessortConvert<T>这样用

改为
private List< SinglePropertyAcccessorConvert> _convers;
private MultiPropertyAccessortConvert _convert;
liuxzh1026 2011-09-29
  • 打赏
  • 举报
回复
第一个类:完整的

using System;

internal abstract class PropertyAccessorBase<T>
{
protected PropertyAccessorBase()
{
}

public abstract object GetValue(T obj, int index);

public abstract string[] Columns { get; }
}
liuxzh1026 2011-09-29
  • 打赏
  • 举报
回复
代码复制全去了。

错误 1 非泛型 类型“WindowsFormsApplication1.SinglePropertyAccessor<T>.SinglePropertyAcccessorConvert”不能与类型实参一起使用
c:\documents and settings\administrator\my documents\visual studio 2010\WindowsFormsApplication1\WindowsFormsApplication1\SinglePropertyAccessor!1.cs 9 22 WindowsFormsApplication1
Icedmilk 2011-09-29
  • 打赏
  • 举报
回复
报什么错?
bdmh 2011-09-29
  • 打赏
  • 举报
回复
好像有几个类型不知道是什么东西,你copy全代码了么

111,116

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧