小编Mic*_*l B的帖子

如果我使用TypeBuilder构建一个带有属性的类型,我是否需要使用propertyBuilder?

我想使用TypeBuilder来构建一个与接口匹配的类型.它的基类型将是对象,因为我没有任何抽象点.

有问题的界面有如下属性::

public interface IFoo{
    int Property{get;}
}
Run Code Online (Sandbox Code Playgroud)

我是否需要实际创建PropertyBuilder?或者我可以放弃为该int get_Property()方法发出一种方法?

c#

4
推荐指数
1
解决办法
1002
查看次数

Dapper 和 Varbinary(max) 流参数

我正在尝试将二进制 blob 存储在数据库表中并从中获取输出。数据存储在一个MemoryStream对象中。我正在尝试使用异步查询将其保存到 sql server 2012 表中。调用成功,但没有数据插入到列中。(例如,当我查询它时,我得到一个 0x0 条目)。

果然,实际检查跟踪时,我看到 dapper 发送了 0x0。内存流有一个长度,所以我做错了什么或者 dapper 不支持这种情况吗?我的查询字符串只是一个简单的插入,并获取 id 和插入时间。

我正在使用以下调用

using(var conn=new SqlConnection(_connstr)){

var dynParams = new DynamicParameters();
dynParams.Add("BinaryBlob",
_memoryStream,DbType.Binary,ParameterDirection.Input,-1);
var res = await conn.QueryAsync<MyResultType>(_queryStr, dynParams);
}
Run Code Online (Sandbox Code Playgroud)

该查询插入一行并获取时间戳,但实际上没有插入任何数据。我究竟做错了什么?

c# dapper sql-server-2012

4
推荐指数
1
解决办法
5255
查看次数

何时以及如何使用Ldvirtftn操作码?

以下示例程序是我试图掌握ldvirtftn操作码的用法.您会看到名称表明这是在将虚函数指针加载到堆栈时使用的操作码.在示例代码中,我正在创建一个具有2个静态方法的类型,Ldftn并且Ldvirtftn这两个方法都返回Base.Method()第一个函数的开放委托Ldftn使用ldftn操作码,并且意外地工作,就像Base.Method虚拟一样.第二种方法使用Ldvirtftn并显然创建了一个无效的程序.我究竟做错了什么?除了混淆之外,这个操作码的目的是什么?

public class Base
{
    public virtual void Method()
    {
        Console.WriteLine("Base");
    }
}

public class Child : Base
{
    public override void Method()
    {
        Console.WriteLine("Child");
    }
}
class Program
{
    static void Main(string[] args)
    {
        AssemblyBuilder ab =AppDomain.CurrentDomain.DefineDynamicAssembly(new AssemblyName("Test"),AssemblyBuilderAccess.RunAndSave);
        ModuleBuilder mb = ab.DefineDynamicModule("TestModule");
        TypeBuilder tb = mb.DefineType("TestType");
        MethodBuilder method = tb.DefineMethod("Ldftn",MethodAttributes.Public | MethodAttributes.Static, typeof(Action<Base>), Type.EmptyTypes);
        var ilgen = method.GetILGenerator();
        ilgen.Emit(OpCodes.Ldnull);
        ilgen.Emit(OpCodes.Ldftn, typeof(Base).GetMethod("Method"));
        ilgen.Emit(OpCodes.Newobj, typeof(Action<Base>).GetConstructors()[0]); …
Run Code Online (Sandbox Code Playgroud)

.net c# il reflection.emit

3
推荐指数
1
解决办法
1590
查看次数

(新手)自定义指令中的ng-switch打破了双向绑定?

我遇到了一个问题,在自定义指令上以角度双向绑定.我有一个指令,它将具有编辑器模式(并具有不同类型的输入)和显示模式.

不幸的是,似乎如果有一个ng-switch,那么双向绑定会从控件中断开.但是,如果我从外部组件访问它,变量仍保持链接.这是一个非常简洁的示例plunker来显示问题.

http://plnkr.co/edit/M8gPfRlrVIXHdXREN1ai

如果修改顶部输入,则更改将传播到底部输入.但是如果修改底部输入,则绑定会中断.如何解决此问题,以便指令中ng-model的更改传播到控制器范围?

angularjs angularjs-directive

3
推荐指数
1
解决办法
948
查看次数

在动态中是否存在valuetype运算符处理的错误?

动态应该能够处理数学而不必让我考虑它,但即使在琐碎的情况下我也遇到了一些问题.考虑这个非常简单的功能::

 public static T DynamicFactorial<T>(T input)
  {
   dynamic num = input;
   dynamic res = 1; 
   for (; num > 1; res *= num, num -=1) ;
   return res;
  }
Run Code Online (Sandbox Code Playgroud)

这是一个应该处理任何数字类型并对其执行阶乘的函数.不幸的是,当我尝试计算时,这给了我以下异常DynamicFactorial(5UL):

Operator '*=' cannot be applied to operands of type 'int' and 'ulong'

请不要说我可以将此代码转换为递归调用,因为这是一个示例.我的问题是,如果你试图使用动态来使用一元赋值运算符,强迫我知道我在编译时计算的类型是没有意义的.一个"潜在的"解决方案是这样做::

  public static T DynamicFactorial<T>(T input)
  {
   dynamic num = input;
   T ONE = (T)(1 as dynamic); 
   dynamic res = ONE; 
   for (; num > ONE; res *= num, num -=ONE) ;
   return res;
  }
Run Code Online (Sandbox Code Playgroud)

这是有效的,但神圣的地狱是这个丑陋的,并要求我创建一个我计划实际使用的类型的常量,这至少可以说是蹩脚的.

c# dynamic

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