用ILSpy反编译一个dll,其中有个函数无法编译通过.如下(别的反编译工具生成代码可能不甚相同):public static IEnumerable<T> Query<T>(this DbConnection cn, string commandText, params object[] parameters)
{
var func = null;
List<T> list = new List<T>();
DbCommand dbCommand = DB.CreateCommand(commandText, cn, parameters);
IEnumerable<DB.PropInfo<T>> props = null;
Type typeFromHandle = typeof(T);
bool flag = typeFromHandle.IsPrimitive || typeFromHandle.IsValueType || typeFromHandle == typeof(string);
if (!flag)
{
props = DB.GetSettableProps<T>();
}
DbDataReader dbDataReader = dbCommand.ExecuteReader();
if (!dbDataReader.HasRows)
{
dbDataReader.Close();
return list;
}
if (flag)
{
while (dbDataReader.Read())
{
list.Add((T)((object)Convert.ChangeType(dbDataReader[0], typeof(T))));
}
}
else
{
List<string> list2 = new List<string>();
for (int i = 0; i < dbDataReader.FieldCount; i++)
{
list2.Add(dbDataReader.GetName(i));
}
var arg_10E_0 =
from n in list2
select new
{
n = n,
prop = props.FirstOrDefault((DB.PropInfo<T> p) => string.Equals(p.Name, n, StringComparison.Ordinal)) ?? props.FirstOrDefault((DB.PropInfo<T> p) => string.Equals(p.Name, n, StringComparison.OrdinalIgnoreCase))
};
if (func == null)
{
func = (<>h__TransparentIdentifier0 => new
{
Name = <>h__TransparentIdentifier0.n,
Property = <>h__TransparentIdentifier0.prop
});
}
var list3 = arg_10E_0.Select(func).ToList();
while (dbDataReader.Read())
{
T t = Activator.CreateInstance<T>();
foreach (var current in list3)
{
current.Property.Setter(t, Convert.ChangeType(dbDataReader[current.Name], current.Property.Type));
}
list.Add(t);
}
}
dbDataReader.Close();
return list;
}
这里有几句无法编译: if (func == null)
{
func = (<>h__TransparentIdentifier0 => new
{
Name = <>h__TransparentIdentifier0.n,
Property = <>h__TransparentIdentifier0.prop
});
}
100分求能帮忙还原成可编译通过的代码?谢谢!
{
var func = null;
List<T> list = new List<T>();
DbCommand dbCommand = DB.CreateCommand(commandText, cn, parameters);
IEnumerable<DB.PropInfo<T>> props = null;
Type typeFromHandle = typeof(T);
bool flag = typeFromHandle.IsPrimitive || typeFromHandle.IsValueType || typeFromHandle == typeof(string);
if (!flag)
{
props = DB.GetSettableProps<T>();
}
DbDataReader dbDataReader = dbCommand.ExecuteReader();
if (!dbDataReader.HasRows)
{
dbDataReader.Close();
return list;
}
if (flag)
{
while (dbDataReader.Read())
{
list.Add((T)((object)Convert.ChangeType(dbDataReader[0], typeof(T))));
}
}
else
{
List<string> list2 = new List<string>();
for (int i = 0; i < dbDataReader.FieldCount; i++)
{
list2.Add(dbDataReader.GetName(i));
}
var arg_10E_0 =
from n in list2
select new
{
n = n,
prop = props.FirstOrDefault((DB.PropInfo<T> p) => string.Equals(p.Name, n, StringComparison.Ordinal)) ?? props.FirstOrDefault((DB.PropInfo<T> p) => string.Equals(p.Name, n, StringComparison.OrdinalIgnoreCase))
};
if (func == null)
{
func = (<>h__TransparentIdentifier0 => new
{
Name = <>h__TransparentIdentifier0.n,
Property = <>h__TransparentIdentifier0.prop
});
}
var list3 = arg_10E_0.Select(func).ToList();
while (dbDataReader.Read())
{
T t = Activator.CreateInstance<T>();
foreach (var current in list3)
{
current.Property.Setter(t, Convert.ChangeType(dbDataReader[current.Name], current.Property.Type));
}
list.Add(t);
}
}
dbDataReader.Close();
return list;
}
这里有几句无法编译: if (func == null)
{
func = (<>h__TransparentIdentifier0 => new
{
Name = <>h__TransparentIdentifier0.n,
Property = <>h__TransparentIdentifier0.prop
});
}
100分求能帮忙还原成可编译通过的代码?谢谢!
public static IEnumerable<T> Query<T>(this DbConnection cn, string commandText, params object[] parameters)
{
//var func = null;
List<T> list = new List<T>();
DbCommand dbCommand = DB.CreateCommand(commandText, cn, parameters);
IEnumerable<DB.PropInfo<T>> props = null;
Type typeFromHandle = typeof(T);
bool flag = typeFromHandle.IsPrimitive || typeFromHandle.IsValueType || typeFromHandle == typeof(string);
if (!flag)
{
props = DB.GetSettableProps<T>();
}
DbDataReader dbDataReader = dbCommand.ExecuteReader();
if (!dbDataReader.HasRows)
{
dbDataReader.Close();
return list;
}
if (flag)
{
while (dbDataReader.Read())
{
list.Add((T)((object)Convert.ChangeType(dbDataReader[0], typeof(T))));
}
}
else
{
List<string> list2 = new List<string>();
for (int i = 0; i < dbDataReader.FieldCount; i++)
{
list2.Add(dbDataReader.GetName(i));
}
var arg_10E_0 =
from n in list2
select new
{
n = n,
prop = props.FirstOrDefault((DB.PropInfo<T> p) => string.Equals(p.Name, n, StringComparison.Ordinal)) ?? props.FirstOrDefault((DB.PropInfo<T> p) => string.Equals(p.Name, n, StringComparison.OrdinalIgnoreCase))
};
//if (func == null)
//{
// func = (<>h__TransparentIdentifier0 => new
// {
// Name = <>h__TransparentIdentifier0.n,
// Property = <>h__TransparentIdentifier0.prop
// });
//}
var list3 = arg_10E_0.Select(item => new { Name = item.n, Property = item.prop });
while (dbDataReader.Read())
{
T t = Activator.CreateInstance<T>();
foreach (var current in list3)
{
current.Property.Setter(t, Convert.ChangeType(dbDataReader[current.Name], current.Property.Type));
}
list.Add(t);
}
}
dbDataReader.Close();
return list;
}var arg_10E_0的时候返回匿名类型的属性为:n和prop
var list3 = arg_10E_0.Select(func).ToList();
select传入一个Func委托,目的只是把匿名对象的属性名称改了一下(Name=n和Property=prop)。