这更像是一个文档,而不是一个真实的问题.这似乎还没有在SO上得到解决(除非我错过了),所以这里有:
想象一下包含静态成员的泛型类:
class Foo<T> {
public static int member;
}
Run Code Online (Sandbox Code Playgroud)
是否有每个特定类的成员的新实例,或者所有Foo类类只有一个实例?
可以通过以下代码轻松验证:
Foo<int>.member = 1;
Foo<string>.member = 2;
Console.WriteLine (Foo<int>.member);
Run Code Online (Sandbox Code Playgroud)
结果是什么,这种行为记录在哪里?
我正在努力提高应用程序的性能.我们有很多Activator.CreateInstance调用引起了一些悲伤.
我们基于一个接口(ITabDocument)实例化了很多类,在浏览后我想到了使用这段代码:
代码并不比使用我们拥有的Activator.CreateInstance代码更好(实际上稍慢).
public static Func<T> CreateInstance<T>(Type objType) where T : class, new()
{
var dynMethod = new DynamicMethod("DM$OBJ_FACTORY_" + objType.Name, objType, null, objType);
ILGenerator ilGen = dynMethod.GetILGenerator();
ilGen.Emit(OpCodes.Newobj, objType.GetConstructor(Type.EmptyTypes));
ilGen.Emit(OpCodes.Ret);
return (Func<T>)dynMethod.CreateDelegate(typeof(Func<T>));
}
Run Code Online (Sandbox Code Playgroud)
我想知道为什么会这样,我所做的只是:
ITabDocument document = CreateInstance<ITabDocument>(Type.GetType("[Company].Something"));
Run Code Online (Sandbox Code Playgroud)
是否有更好的方法来创建有助于上述内容的对象?当你不确定具体的类型时,它有点难.
我正在尝试使用返回对象的表达式树创建一个方法,但我无法弄清楚如何实际指定要返回的对象.我试过读过这个,但实际上似乎没有在任何地方指定返回值.
我已经完成了所有的任务和内容,但是如何指定从使用表达式树创建的方法返回的对象?
编辑:这些是v4表达式树,我试图创建的方法是这样的:
private object ReadStruct(BinaryReader reader) {
StructType obj = new StructType();
obj.Field1 = reader.ReadSomething();
obj.Field2 = reader.ReadSomething();
//...more...
return obj;
}
Run Code Online (Sandbox Code Playgroud) 使用以下语法从SqlDataReader读取值之间的区别是什么:
Dim reader As SqlClient.SqlDataReader
reader("value").ToString()
Run Code Online (Sandbox Code Playgroud)
要么
Dim reader As SqlClient.SqlDataReader
reader.GetString(reader.GetOrdinal("value"))
Run Code Online (Sandbox Code Playgroud) 如果您有以下代码:
static T GenericConstruct<T>() where T : new()
{
return new T();
}
Run Code Online (Sandbox Code Playgroud)
C#编译器坚持发出对Activator.CreateInstance的调用,这比本机构造函数慢得多.
我有以下解决方法:
public static class ParameterlessConstructor<T>
where T : new()
{
public static T Create()
{
return _func();
}
private static Func<T> CreateFunc()
{
return Expression.Lambda<Func<T>>( Expression.New( typeof( T ) ) ).Compile();
}
private static Func<T> _func = CreateFunc();
}
// Example:
// Foo foo = ParameterlessConstructor<Foo>.Create();
Run Code Online (Sandbox Code Playgroud)
但是,为什么这个解决方案应该是必要的,这对我没有意义.
如何使用泛型将DataReader对象映射到类对象?
例如,我需要执行以下操作:
public class Mapper<T>
{
public static List<T> MapObject(IDataReader dr)
{
List<T> objects = new List<T>();
while (dr.Read())
{
//Mapping goes here...
}
return objects;
}
}
Run Code Online (Sandbox Code Playgroud)
后来我需要调用这个类方法,如下所示:
IDataReder dataReader = DBUtil.Fetchdata("SELECT * FROM Book");
List<Book> bookList = Mapper<Book>.MapObject(dataReder);
foreach (Book b in bookList)
{
Console.WriteLine(b.ID + ", " + b.BookName);
}
Run Code Online (Sandbox Code Playgroud)
注意,Mapper - 类应该能够映射由T表示的任何类型的对象.
我有一个View,通常从WebMatrix查询(IEnumerable<dynamic>数据类型)获取查询结果,并在表中显示结果:
@model MySite.Models.Entity
@foreach(var row in Model.Data)
{
<tr>
@foreach (var column in row.Columns)
{
<td>@column<span>:</span> @row[column]</td>
}
</tr>
}
Run Code Online (Sandbox Code Playgroud)
这是我查询数据库的模型:
public class Entity
{
public dynamic Data {get; set; }
public Entity(String table)
{
if (table == "User" || table == "Group)
{
WebMatrix.Data.Database db = new WebMatrix.Data.Database();
db.Open(ConString);
Data = db.Query("SELECT * FROM " + table);
}
else
{
using (OdbcConnection con = ne4w OdbcConnection(ConString))
{
OdbcCommand com = new OdbcCommand("Select * From " + table); …Run Code Online (Sandbox Code Playgroud) 前言:
我正在将DbDataReader映射到实体并具有一些基准:
[0] retrieved 159180 records in 45135 ms
[1] retrieved 159180 records in 45008 ms
[2] retrieved 159180 records in 44814 ms
[3] retrieved 159180 records in 44987 ms
[4] retrieved 159180 records in 44914 ms
[5] retrieved 159180 records in 45224 ms
[6] retrieved 159180 records in 45829 ms
[7] retrieved 159180 records in 60762 ms
[8] retrieved 159180 records in 52128 ms
[9] retrieved 159180 records in 47982 ms
Run Code Online (Sandbox Code Playgroud)
考虑到从Sql Server Management Studio查询只需要17秒,这是一个非常大的时间和极差.我的选择声明:
"SELECT*FROM tbl_MyTable" …
我正在寻找一种解决方案,用于在使用DataRow和仅具有一个功能(或一个基本功能)的DataReader时如何从数据库中提取数据.
我的问题源于这样一个事实:有时候我需要一个DataReader,有时我需要一个DataTable/DataRow但是为了从这些对象中提取数据,我需要两个单独的数据访问方法,因为它们不共享一个接口.
基本上当我的数据库结构发生变化时,我不想进入并在多个函数中编写以下数据检索代码:
someValue = dr["someValue"]
Run Code Online (Sandbox Code Playgroud)
它是相同的语法并做同样的事情所以我想要一个共享该功能的函数,无论我是使用DataReader还是DataTable/DataRow从数据库中提取数据.
我正在使用反射将datareader转换为通用集合列表.任何人都可以建议我为此实现反射的最佳方法吗?我想要最快的路?
c# ×8
.net ×3
datareader ×2
generics ×2
reflection ×2
activator ×1
ado.net ×1
asp.net ×1
automapping ×1
constructor ×1
datarow ×1
mapping ×1
performance ×1
sql ×1
static ×1
webmatrix ×1