反编译出来的C# 泛型委托代码无法再次编译。
使用Reflector查看一个与ActiveDirectory同步的组件集时,发现一个名为ActiveDirectoryStreamReader<T>的类被定义成以下格式:
public class ActiveDirectoryStreamReader<T> : IEnumerable<T>, IEnumerable
{
// Fields
private string domainPath;
private FactoryMethod<T> factoryMethod;
private string filter;
private bool hasToSearchDeletedObjects;
private List<string> properties;
private ADServiceAccount serviceAccount;
// Methods
public ActiveDirectoryStreamReader(string domainPath, string filter, FactoryMethod<T> factoryMethod);
public ActiveDirectoryStreamReader(string domainPath, List<string> properties, string filter, FactoryMethod<T> factoryMethod);
public ActiveDirectoryStreamReader(string domainPath, string filter, ADServiceAccount serviceAccount, FactoryMethod<T> factoryMethod);
public ActiveDirectoryStreamReader(string domainPath, List<string> properties, string filter, ADServiceAccount serviceAccount, FactoryMethod<T> factoryMethod);
public ActiveDirectoryStreamReader(string domainPath, List<string> properties, string filter, bool hasToSearchDeletedObjects, FactoryMethod<T> factoryMethod);
public ActiveDirectoryStreamReader(string domainPath, List<string> properties, string filter, bool hasToSearchDeletedObjects, ADServiceAccount serviceAccount, FactoryMethod<T> factoryMethod);
private DirectorySearcher CreateSearcher(DirectoryEntry entry);
public IEnumerator GetEnumerator();
private IEnumerator<T> MyEnumerator();
IEnumerator<T> IEnumerable<T>.GetEnumerator();
private void ValidateArguments();
// Nested Types
[CompilerGenerated]
private sealed class <MyEnumerator>d__0 : IEnumerator<T>, IEnumerator, IDisposable
{
// Fields
private int <>1__state;
private T <>2__current;
public ActiveDirectoryStreamReader<T> <>4__this;
public SearchResultCollection <collection>5__3;
public DirectoryEntry <entry>5__1;
public int <i>5__4;
public T <result>5__5;
public DirectorySearcher <searcher>5__2;
// Methods
[DebuggerHidden]
public <MyEnumerator>d__0(int <>1__state);
private bool MoveNext();
[DebuggerHidden]
void IEnumerator.Reset();
void IDisposable.Dispose();
// Properties
T IEnumerator<T>.Current { [DebuggerHidden] get; }
object IEnumerator.Current { [DebuggerHidden] get; }
}
public delegate T FactoryMethod(SearchResult searchResult);
}
请注意红色部分。将这些代码copy到我的类库项目中后,编译时发生以下错误:
错误 2 非泛型 类型“XIZIOTIS.IRS.BLL.ActiveDirectory.ActiveDirectoryStreamReader<T>.FactoryMethod”不能与类型参数一起使用 E:\XIZI\IRS\IRSBLL\ActiveDirectory\ActiveDirectoryStreamReader.cs 18 17 IRSBLL
根据我的理解,这应该是个泛型方法,我已经把MyEnumerator这段由JIT生成的代码去掉,可是还不行。
对泛型不甚了解,望高手解答疑问,谢谢!