Regex仅适用于字符串,但如果该功能不仅可以扩展到字符而且可以扩展到对象甚至更多功能呢?假设我们的对象是整数,它们可以是任何顺序:
1 2 3 4 5 6 7 8 9 10 11 12 13
Run Code Online (Sandbox Code Playgroud)
您要解决的任务是找到素数对(或类似模式搜索任务),如下所示:
{prime}{anyNumber}{prime}
Run Code Online (Sandbox Code Playgroud)
所以答案是这样的:
(3,4,5) (5,6,7) (11,12,13)
Run Code Online (Sandbox Code Playgroud)
或者是素数链的一个更复杂的例子:
{prime}({anyNumber}{prime})+
Run Code Online (Sandbox Code Playgroud)
回答:
(3,(4,5),(6,7)) (11,(12,13))
Run Code Online (Sandbox Code Playgroud)
非常像正则表达式的工作,对吧?
会发生的是你定义了一个名为isPrime(x)的函数,并在需要检查下一个输入元素是否为实数素数时使用它(因此它与对象或对象空间有某种相等性)
到目前为止我创造了什么
我在C#中创建了类似于Regex类的ObjectRegex类.它接受上面的模式并执行与之相关的谓词来识别对象.它工作得很好,但问题是它可以工作任何类型的TValue序列应该转换为字符串才能传递给Regex模式,为此我应该将所有谓词应用于整个序列.O(n*m)毕竟是一个坏主意....
我决定以艰难的方式解决它....并尝试继承字符串,这是密封的,继承被禁止.从这个继承的类中需要的是覆盖访问器
char this[int index] {get;}
Run Code Online (Sandbox Code Playgroud)
为了延迟执行谓词的好处,它实际上是有意义的.
那么,任何想法如何制作呢?我喜欢.NET Regex和它的语法,有没有办法绕过这个字符串诅咒和欺骗引擎?反思可能还是一些我不知道的铁杆?
更新1
我发现这篇文章http://www.codeproject.com/Articles/463508/NET-CLR-Injection-Modify-IL-Code-during-Run-time 并认为可以通过替换这个[int index]方法来完成通过我的代码,但我认为它会破坏其他一切,因为你只能替换一个实例的方法.
是否可以将依赖项注入Entity Framework 6的Configuration类?
例如,像这样:
internal sealed class Configuration : DbMigrationsConfiguration<MyBaseContext>
{
private readonly ILogger _logger;
public Configuration(ILogger logger)
{
this._logger = logger;
AutomaticMigrationsEnabled = true;
}
protected override void Seed(Home.DAL.Data.HomeBaseContext context)
{
//log something
}
}
Run Code Online (Sandbox Code Playgroud)
或者更通用的方法是获得在迁移内部注入代码的可能性:
public partial class InitialMigration : DbMigration
{
private readonly ILogger _logger;
public InitialMigration(ILogger logger)
{
this._logger = logger;
}
public override void Up()
{
CreateTable(...);
}
public override void Down()
{
DropTable(...);
}
}
Run Code Online (Sandbox Code Playgroud)
DI初始化在Entity Framework 6中发生了什么来定义那些绑定?
UPDATE
我不是在问我应该用什么.目前,我使用Ninject,但这是不可能的,因为无论我使用什么,我应该能够将依赖注入迁移的构造函数.如果你写的东西就像我在上面的例子中所写的那样,那么你只会抛出"无默认构造函数"的异常.
以上示例中的ILogger只是依赖的简单示例.如果您有IGeneratorService会生成一些数据并且您希望使用此服务为Seed方法生成数据,情况会变得更糟.
RabbitMQ中的解决方案等待带有超时的消息并等待带有超时的单个RabbitMQ消息似乎不起作用,因为官方C#库中没有下一个交付方法并且QueueingBasicConsumer被删除,因此它只会在任何地方抛出NotSupportedException.
如何从队列中等待指定超时的单个消息?
PS
它可以通过Basic.Get()来完成,是的,但是,在指定的时间间隔(超额流量,多余的CPU)中拉取消息是不好的解决方案.
更新
EventingBasicConsumer by implmenetation不支持立即取消.即使您在某个时刻调用BasicCancel,即使您通过BasicQos指定预取- 它仍将在帧中获取,并且这些帧可以包含多个消息.因此,单个任务执行并不好.不要打扰 - 它只是不适用于单个消息.
假设,我想A用table 替换table B并将所有数据从一个迁移到另一个,所以我这样做:
B通过SQL查询创建表 A格式到B格式的整个数据副本执行转换 B通过SQL查询将所有内容放到表中 A通过SQL查询删除表 问题是,有时你需要打破事务并进行从A格式到B格式的非事务转换,这甚至可能涉及对不同服务的调用(例如,对象的新地理政治状态A,或来自的不同的字段序列化合同)A,从7ZIP它A到B或任何你想要的改变有关数据A).
所以,问题是,如何以任何理想的方式完成步骤2到EF :
A格式到B格式的整个数据副本进行转换 我的意思是不打破EF迁移文件的概念,并为我提供类似"主"方法的东西作为我的迁移步骤的入口点.有什么建议?
假设我有代码优先模型:
public class FooBar
{
[Key]
public int Id {get;set;}
[MaxLength(254)]
public string Title {get;set;}
public string Description {get;set;}
}
Run Code Online (Sandbox Code Playgroud)
以及检索行的一些数据子集的方法:
public IQueryable<FooBar> GetDataQuery(bool includeTitle, bool includeDescription)
{
var query = ctx.FooBars.AsNoTracking().Where(Id > 123);
//how to inlcude/exclude???
return query;
}
Run Code Online (Sandbox Code Playgroud)
问题是如何在不对匿名类型进行硬编码的情况下使用特定字段构建查询?基本上,我想告诉SQL查询构建器使用指定的字段构建查询,而不在客户端上进行后期过滤.因此,如果我排除描述 - 它将不会通过电汇发送.
此外,有这样的经验:
public IQueryable<FooBar> GetDataQuery(bool includeTitle, bool includeDescription)
{
var query = ctx.FooBars.AsNoTracking().Where(Id > 123);
query = query.Select(x=> new
{
Id = x.Id
Title = includeTitle ? x.Title : null,
Description = includeDescription ? x.Description : null,
}) …Run Code Online (Sandbox Code Playgroud) 我们都知道Task.Run或Parallel.ForEach等方法。 它们中的每一个都会创建根据单独线程或线程池中的线程中的选项运行的任务。但是,他们的堆栈位于哪里?在某些生成堆中或者有特殊的地方适合它们?
例如,我可以创建 1000 个任务,它们的堆栈驻留在哪里?如果我调用 GC.Collect(),它们的物理地址会在某个时刻移动吗?
我已经定义了如下选项:
public class ArgumentsHeader
{
[VerbOption("configure", HelpText = "Sets configuration on server.")]
public ServerConfigurationArguments ServerConfigurationArguments { get; set; }
[HelpVerbOption]
public string GetUsage(string s)
{
return HelpText.AutoBuild(this, s);//always just 'help' or null showing up here.
}
}
public class ServerConfigurationArguments : ArgumentsBase
{
[Option('f', "filename", HelpText = "Path to JSON configuration file", DefaultValue = "config.json", Required = true)]
public string PathToConfig { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
然后像这样解析它们:
string invokedVerb = null;
object invokedVerbInstance = null;
var parser = new Parser(x …Run Code Online (Sandbox Code Playgroud) 如果您熟悉生产代码,您总是会遇到需要在服务中请求/处理任何内容之前调用的逻辑。
我个人将它包装成这样的东西并从DI框架调用它:
public interface IMigrator
{
Task UpdateAsync();
}
Run Code Online (Sandbox Code Playgroud)
例如:
我目前对 Web API 框架不太精通,需要知道应该将该逻辑放在哪里?在Startup.Configure?合适吗?如果需要(比如说 10 分钟),结果会怎样?
需要您的建议:
public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
services
.AddControllers();
services.Register(new CoreModule(), new DataModule());
}
// This method gets called by the …Run Code Online (Sandbox Code Playgroud) c# iis-express docker asp.net-core-webapi entity-framework-migrations
StringBuilder是否在ToString调用时缓存字符串?例如,这会创建两个不同的内存中字符串,还是只使用一个:
var sb = new StringBuilder();
sb.Append("foo");
sb.Append("bar");
var str1 = sb.ToString();
var str2 = sb.ToString();
Run Code Online (Sandbox Code Playgroud)
是否会为连续读取操作缓存自己的结果?
c# ×9
caching ×1
command ×1
docker ×1
entity-framework-migrations ×1
iis-express ×1
inheritance ×1
rabbitmq ×1
regex ×1
sql-server ×1