小编Zac*_*ach的帖子

如何在运行时动态创建C#类(根据现有类)

背景:

我们有一个客户端(Javascript)和服务器端(C#)的项目.需要在两侧运行计算逻辑,因此它用Javascript和C#编写.我们为C#版本类进行了许多单元测试.我们的目标是分享C#和Javascript实现的单元测试.

现在的情况:

我们能够在嵌入式JS引擎(Microsoft ClearScript)中运行Javascript代码.代码如下所示:

public decimal Calulate(decimal x, decimal y) 
{
     string script = @"
            var calc = new Com.Example.FormCalculater();
            var result = calc.Calculate({0}, {1});";

     this.ScriptEngine.Evaluate(string.Format(script, x, y));

     var result = this.ScriptEngine.Evaluate("result");
     return Convert.ToDecimal(result);
}
Run Code Online (Sandbox Code Playgroud)

但是,编写这样的类需要付出很多努力.我们正在寻找一种在运行时动态创建这些类的方法.

例如,我们有一个C#类(在JS文件中也有JS版本):

public class Calculator {
    public decimal Add(decimal x, decimal y){ ... }
    public decimal Substract(decimal x, decimal y){ ... }
    public decimal Multiply(decimal x, decimal y){ ... }
    public decimal Divide(decimal x, decimal y){ ... }
}
Run Code Online (Sandbox Code Playgroud)

我们想要创建一个具有相同方法的动态类,但调用脚本引擎来调用相关的JS代码.

有可能吗?

javascript c# emit clearscript

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

如何对调用其他成员函数(C#或Java)的函数进行单元测试?

假设我有一个如下所示的类,我想对'DoCalculate(arg1,arg2)'函数进行单元测试:

public class Calc
{
    public int DoCalculate(int arg1, int arg2)
    {
         int num1 = this.GetNum1(); // member function
         int num2 = this.GetNum2(); // member function

         if( this.flag1)  // member variable
         {
             return num1*num2+arg1-arg2;
         }
         else 
         {
             int num3 = this.GetNum3();  // member function
             return num3 + arg2;
         }
    }
}
Run Code Online (Sandbox Code Playgroud)

在此函数中,它从其他成员函数和成员变量获取输入.

如何对这个功能进行单元测试?或者如何重构以使其可单元测试?

unit-testing

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

如何将 IL 翻译为 Emit 语句?

这是 C# 代码:

public class Calc1 : ICalculator
{
    public int Calculate(int x, int y)
    {
        return x + y;
    }
}
Run Code Online (Sandbox Code Playgroud)

这是 IL:

.method public hidebysig newslot virtual final 
    instance int32  Calculate(int32 x,
                              int32 y) cil managed
{
  // Code size       9 (0x9)
  .maxstack  2
  .locals init ([0] int32 CS$1$0000)
  IL_0000:  nop
  IL_0001:  ldarg.1
  IL_0002:  ldarg.2
  IL_0003:  add
  IL_0004:  stloc.0
  IL_0005:  br.s       IL_0007
  IL_0007:  ldloc.0
  IL_0008:  ret
} // end of method Calc1::Calculate
Run Code Online (Sandbox Code Playgroud)

如何将上面的 IL 转换为 Emit 语句?这是我逐行翻译的尝试,但得到了“System.InvalidProgramException”。

        string …
Run Code Online (Sandbox Code Playgroud)

c# reflection.emit

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

分配 shared_ptr nullptr 的线程安全吗?

假设有一个shared_ptr:

std::shared_ptr<MyClass> myPtr = std::make_shared(new MyClass());
Run Code Online (Sandbox Code Playgroud)

在工作线程中:

myPtr = nullptr;
Run Code Online (Sandbox Code Playgroud)

在主线程中:

if( myPtr != nullptr )
{
    // do something
}
Run Code Online (Sandbox Code Playgroud)

上面的代码线程安全吗?还是主线程可以立即看到新值?

thread-safety shared-ptr c++11

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

如何将“锁定”重构为“异步/等待”?

我们有一个用 C# 目标框架 2.0 编写的旧库。最近我们将在现代 .net core 项目中使用它并打算使用async/await. 然而,旧图书馆有很多lock街区。

我们计划添加新async方法来实现相同的逻辑。

例如,

旧代码

void GetOrder()
{
    // ...
    lock(_lock)
    {
    //...
    }
}
Run Code Online (Sandbox Code Playgroud)

预期结果

async Task AsyncGetOrder()
{
    // ...
    await DoSomethingWithLock()
}
Run Code Online (Sandbox Code Playgroud)

请给我一些关于如何翻译lock成 的建议async/await

c# thread-synchronization async-await

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

如何简洁地创建shared_ptr?

如何缩短声明:

auto ptr = std::shared_ptr<CPoint>(new CPoint(x, y));
Run Code Online (Sandbox Code Playgroud)

请注意CPoint出现两次.可以缩短吗?

喜欢:

auto ptr = XXXX<CPoint>(x, y);
Run Code Online (Sandbox Code Playgroud)

XXXX是一个宏或任何东西.它应该适用于任何带有任何参数的构造函数.

auto ptrA = XXXX<ClassA>(); // a shared_ptr to new ClassA()
auto ptrB = XXXX<ClassB>(a, b, c); // a shared_ptr to new ClassB(a, b, c)
Run Code Online (Sandbox Code Playgroud)

c++ shared-ptr c++11

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

Mybatis:如何检查行是否存在并返回布尔值?

数据库是MySQL.代码应如下所示:

public interface UserMapper {
    @Select("....")
    boolean checkUserExists(@Param("email") String email);
}
Run Code Online (Sandbox Code Playgroud)

是否可能,以及如何编写SELECT SQL?(可以存在吗?)

mysql mybatis

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

如何在焦点丢失时使ui-mask保留无效输入?

我对AngularJS UI中的ui-mask模块很新.当我使用它时,我注意到如果用户输入无效格式,并将焦点移动到另一个控件,则输入将被清除.

如何在焦点丢失时使ui-mask保留无效输入?我想向用户显示错误工具提示,例如"此字段无效",而不是清除他们的输入.

===============================

更新:

感谢majorlazer.

的?标记有效,例如,当掩码为?99/9999时,输入将不会被清除.

但是占位符存在一个小问题.我的面具是?99/9999,我的占位符是

'__/____' (2 underscores and a slash and 4 underscores)
Run Code Online (Sandbox Code Playgroud)

但是当输入没有焦点时,它会显示出来

'_//____' (1 underscore and two slashes and 4 underscores)
Run Code Online (Sandbox Code Playgroud)

你有什么主意吗?

angularjs angular-ui

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

如何使用std :: thread?

当我这样使用时std::thread:

func()
{
   std::thread(std::bind(&foo, this));
}
Run Code Online (Sandbox Code Playgroud)

线程对象在堆栈中分配,并在func()返回时被销毁.所以我尝试使用它:

func()
{
   std::thread* threadPtr = new std::thread(std::bind(&foo, this));
}
Run Code Online (Sandbox Code Playgroud)

我应该在哪儿delete threadPtr?我怎样才能创建最初暂停的线程?

c++ multithreading stdthread

0
推荐指数
2
解决办法
5992
查看次数