小编Rya*_*ker的帖子

如何将2个或更多c#程序集合并到1个库中?

我有4个dll.但是我希望有一个单独的dll,它将包含来自所有这四个dll的代码.我尝试添加一个项目并将所有现有代码粘贴到一个项目中,但我不能.

c# dll

11
推荐指数
2
解决办法
8249
查看次数

使用在运行时确定的类型参数调用泛型函数

我有一个问题涉及使用在运行时已知的类型参数调用类的泛型方法.

具体来说,代码如下所示:


FieldInfo[] dataFields = this.GetType().GetFields( BindingFlags.Public | BindingFlags.Instance );

// data is just a byte array used internally in DataStream
DataStream ds = new DataStream( data );

foreach ( FieldInfo field in dataFields )
{
    Type fieldType = field.FieldType;

    // I want to call this method and pass in the type parameter specified by the field's type
    object objData = ( object ) ds.Read<fieldType>();
}
Run Code Online (Sandbox Code Playgroud)

Read()函数如下所示:


public T Read() where T : struct
Run Code Online (Sandbox Code Playgroud)

该函数的目的是返回从字节数组中读取的数据.

有没有办法在运行时调用泛型方法?

c# generics reflection runtime dynamic

8
推荐指数
2
解决办法
7041
查看次数

使用C#的新异步功能等待网络数据包的最佳方法是什么

我最近一直在玩新的Async CTP,我遇到过一种我不确定如何继续的情况.

在我目前的代码库中,我使用的是"作业"和"作业管理器"的概念.作业仅用于处理初始消息,发送响应,然后等待响应.

我已经有了基于同步套接字的现有代码,其中网络线程正在等待数据到达,然后将其传递给事件处理程序,最终传递给作业管理器.

作业管理器查找将处理消息的作业,并将其传递.

所以场景是这样的:

  1. 工作经理获得新消息并启动工作.
  2. 作业启动,处理消息并发送回复消息.
  3. 此时,作业将等待对回复的响应.

这是一个伪代码示例:

class MyJob : Job
{
    public override void RunJob( IPacketMsg packet )
    {
        // handle packet

        var myReply = new Packet();
        SendReply( myReply );

        await GetResponse();
    }
}
Run Code Online (Sandbox Code Playgroud)

但我不完全确定如何在第3步继续.工作经理将获得响应,然后将其交给正在运行的工作.但我不知道如何让工作等待回应.

我考虑过创建一个等待在WaitHandle上阻塞的任务,但这是最好的解决方案吗?

在这种情况下我还能做些什么吗?

编辑 关于Async CTP的主题,在未使用UI的情况下会发生什么.我已经阅读了Eric Lippert的Async博客,但我不相信它曾经触及过如何在没有UI线程的情况下在后台工作的主题(它是关闭背景工作者还是......?)

c# task-parallel-library async-await async-ctp

6
推荐指数
1
解决办法
1307
查看次数

通用BitConverter式方法?

我最近遇到过一种情况,我需要创建一个通用方法来从字节数组中读取数据类型.

我创建了以下类:


public class DataStream
{
    public int Offset { get; set; }

    public byte[] Data { get; set; }

    public T Read<T>() where T : struct
    {
        unsafe
        {
            int dataLen = Marshal.SizeOf( typeof( T ) );
            IntPtr dataBlock = Marshal.AllocHGlobal( dataLen );


            Marshal.Copy( Data, Offset, dataBlock, dataLen );


            T type = *( ( T* )dataBlock.ToPointer() );

            Marshal.FreeHGlobal( dataBlock );

            Offset += dataLen;

            return type;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

现在,除了解除分配问题,此代码不会使用此消息进行编译:

Cannot take the address of, get the size of, or …

c# unsafe marshalling

5
推荐指数
2
解决办法
4730
查看次数

具有相同POCO类的多个表

我有一个现有的数据库,我有四个相同和无关的表.

我想使用相同的POCO类来描述所有四个,而不必创建相同类的重复项.

这是我的上下文到目前为止的样子:

class StatsContext : DbContext
{
    // [MagicTableAttribute( "map_ratings_vsh" )] -- does something like this exist?
    public DbSet<MapRatings> MapRatingsVSH { get; set; }

    public DbSet<MapRatings> MapRatingsJump { get; set; }

    // 2 more tables using same class
}

class MapRatings
{
    public string SteamID { get; set; }

    public string Map { get; set; }

    public int Rating { get; set; }

    [Column( "rated" )]
    public DateTime Time { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我的问题是现有的表名为"map_ratings_vsh"和"map_ratings_jump",我不能使用数据注释,TableAttribute因为它只能在类上使用.

有没有其他方式 - …

c# entity-framework ef-code-first entity-framework-4.1

5
推荐指数
1
解决办法
2080
查看次数

MinGW/GCC延迟加载DLL等效?

我正在尝试将一些旧的MSVC C++代码移植到MinGW/GCC.

一个问题是项目在很大程度上依赖于/ DELAYLOAD选项来查找并不总是使用的函数,以及正确的dll在运行时的位置.

MinGW/GCC有类似的选择吗?

此代码针对的是Windows平台.

c++ gcc mingw visual-studio visual-c++

4
推荐指数
2
解决办法
2486
查看次数

如何使用linq从索引数组转到对象集合?

我的标题问题有点模糊,因为很难问,但我的情况是这样的:

我有一个int数组,它们是一个单独的对象集合的索引.

该数组如下所示:

int[] indices = { 0, 2, 4, 9, 10, 11, 13, /* more (non-)sequential indices */ };
Run Code Online (Sandbox Code Playgroud)

这些索引中的每一个都对应于我拥有的集合中该索引处的对象.

我希望能够使用我的数组中的索引构建这些对象的新集合.

我如何使用一些LINQ函数?

c# linq arrays collections

2
推荐指数
1
解决办法
130
查看次数