小编nfp*_*lee的帖子

按版本排序字符串列表

我有一个字符串列表.每个字符串都遵循"{Path}\UpdateTo {Version} - {Order}"模式.

我需要对列表进行排序,使得最低版本号位于顶部.如果存在多个具有相同版本号的文件,则会附加可选的订单参数.如果任何字符串上存在订单,则它应显示在具有相同版本号且没有订单号的字符串上方.

例如,给出以下列表(注意项目是随机排序的):

var files = new List<string>() {
    @"C:\Migrations\UpdateTo1.2-2",
    @"C:\Migrations\UpdateTo1.5-2",
    @"C:\Migrations\UpdateTo1.2",
    @"C:\Migrations\UpdateTo1.4",
    @"C:\Migrations\UpdateTo1.1",
    @"C:\Migrations\UpdateTo1.5",
    @"C:\Migrations\UpdateTo1.2-1",
    @"C:\Migrations\UpdateTo1.5-1"
};
Run Code Online (Sandbox Code Playgroud)

结果将是:

var files = new List<string>() {
    @"C:\Migrations\UpdateTo1.1",
    @"C:\Migrations\UpdateTo1.2-1",
    @"C:\Migrations\UpdateTo1.2-2",
    @"C:\Migrations\UpdateTo1.2",
    @"C:\Migrations\UpdateTo1.4",
    @"C:\Migrations\UpdateTo1.5-1",
    @"C:\Migrations\UpdateTo1.5-2",
    @"C:\Migrations\UpdateTo1.5"
}
Run Code Online (Sandbox Code Playgroud)

我一直在尝试各种各样的想法,但到目前为止,我的尝试已经完全混乱.如果有人可以提供帮助,我会很感激.谢谢

c# sorting

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

潜在的并发问题?

我一直在构建ASP.NET MVC应用程序,当我启动它时,我担心潜在的多线程问题.一个特别值得关注的是以下代码:

private static IDictionary<string, ISettings> _settingsDictionary = new Dictionary<string, ISettings>();

public T Settings<T>() where T : ISettings, new() {
    var key = typeof(T).FullName;

    if (!_settingsDictionary.ContainsKey(key))
        _settingsDictionary[key] = _settingsService.GetSettings<T>();

    return (T)_settingsDictionary[key];
}
Run Code Online (Sandbox Code Playgroud)

请注意,字典定义为静态.这允许我缓存字典,以便它为应用程序长度的每个请求返回相同的实例.

这在本地测试时工作正常,但我担心它可能会被数百名用户使用.这让我研究了ConcurrencyDictionary.请问你能告诉我是否需要使用它以及如果是这样的话我会怎么做.

谢谢

c# asp.net-mvc concurrency multithreading

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

在单元测试项目中获取具有属性的程序集

是否可以获取应用了自定义属性的所有引用程序集(在单元测试项目中).我使用以下代码使我的应用程序成功运行:

var assemblies = System.Web.Compilation.BuildManager.GetReferencedAssemblies().Cast<Assembly>().Where(a => a.GetCustomAttributes(false).OfType<AssemblyCategoryAttribute>().Any()).ToList();
Run Code Online (Sandbox Code Playgroud)

但是System.Web.Compilation.BuildManager在我的测试项目中不起作用,所以我尝试了:

Assembly.GetExecutingAssembly().GetReferencedAssemblies().Select(a => Assembly.ReflectionOnlyLoad(a.FullName).Where(a => a.GetCustomAttributes(false).OfType<AssemblyCategoryAttribute>().Any()).ToList();
Run Code Online (Sandbox Code Playgroud)

但这引发了错误:

反映通过ReflectionOnlyGetType加载的Type的自定义属性是非法的(请参阅Assembly.ReflectionOnly) - 请改用CustomAttributeData.

如果有人能告诉我怎么做,我会很感激.谢谢

c# reflection unit-testing

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

让数据库连接打开?

我的Web应用程序具有以下类:

public class DatabaseProvider {
    private readonly IDbConnection _cn;

    public DatabaseProvider(IDbConnection cn) {
        _cn = cn;
    }

    public void ExecuteNonQuery(string query) {
        // Execute the query
        var cmd = _cn.CreateCommand();
        cmd.CommandText = query;
        cmd.ExecuteNonQuery();
    }
}
Run Code Online (Sandbox Code Playgroud)

使用以下代码声明IDbConnection依赖项(使用Microsoft Unity):

container.RegisterType<IDbConnection>(new InjectionFactory(c => {
    var cn = new SqlConnection("...");
    cn.Open();
    return cn;
}));
Run Code Online (Sandbox Code Playgroud)

这允许我将连接换成SQLite,如下所示:

container.RegisterType<IDbConnection>(new InjectionFactory(c => {
    var cn = new SQLiteConnection("Data Source=:memory:;Version=3;");
    cn.Open();
    return cn;
}));
Run Code Online (Sandbox Code Playgroud)

我在测试时使用SQLite,连接必须保持打开,否则数据会丢失.因此,我不能在需要时打开和关闭连接.

我总是在需要时打开与数据库的连接,并想知道这是否可以扩展到大型应用程序?

我很感激有关如何改进的建议.谢谢

c# sql-server sqlite unit-testing unity-container

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

Symfony 2/3 在目录中获取实现接口的类

在 Symfony 2 或 3 中是否有一种很好的方法来加载实现特定接口的目录中的所有类?

php symfony

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

NHibernate审计 - PostInsert不工作

我的应用程序具有以下实体:

public class User
{
    public virtual int UserID { get; set; }
    public virtual string UserName { get; set; }
    public virtual IList<UserLog> Log { get; private set; }

    public User()
    {
        Log = new List<UserLog>();
    }
}

public class UserLog
{
    public virtual int UserLogID { get; set; }
    public virtual User User { get; set; }
    public virtual string UserName { get; set; }
    public virtual DateTime DateCreated { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

使用以下流畅的映射:

public class UserMap …
Run Code Online (Sandbox Code Playgroud)

nhibernate nhibernate-mapping fluent-nhibernate

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

SQLite:插入标识列

我是SQLite的新手,我正在尝试运行以下代码:

using (var cn = new SQLiteConnection("Data Source=:memory:;Version=3;")) {
    cn.Open();

    var cmd = cn.CreateCommand();
    cmd.CommandText = "CREATE TABLE [ContentItems] ([Id] [int] IDENTITY(1,1) NOT NULL, [Title] [nvarchar](100) NOT NULL, CONSTRAINT [PK_ContentItems] PRIMARY KEY ([Id]))";
    cmd.ExecuteNonQuery();

    var cmd2 = cn.CreateCommand();
    cmd2.CommandText = "INSERT INTO [ContentItems] (Title) VALUES ('Test 1')";
    cmd2.ExecuteNonQuery();
}
Run Code Online (Sandbox Code Playgroud)

但是这给出了错误:

由于约束违反导致的中止ContentItems.Id可能不是NULL

我已经浏览了文档,但根据我过去的SQL经验,我看不出为什么这不起作用.我很感激你的帮助.谢谢

c# sql sqlite

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

NHibernate LINQ 添加查询提示

我正在尝试将“OPTION(RECOMPILE)”添加到我的一些 NHibernate 查询的末尾。我找到了以下帖子:

https://www.codewrecks.com/post/old/2011/07/use-sql-server-query-hints-with-nhibernate-hql-and-icriteria/

这描述了如何添加拦截器来附加 SQL。然而,他们使用 ICriteria,而我使用 LINQ 来查询我的数据。理想情况下,我希望能够这样说:

var query = session.Query<Foo>().OptionRecompile().ToList();
Run Code Online (Sandbox Code Playgroud)

我想知道是否可以向 IQueryable 添加一个扩展方法,它将在查询中注入一些字符串,然后我可以在拦截器中检测到该字符串。这与上面文章中使用的方法类似,他们添加评论并进行检测。

了解更多信息。我之前处理过 LINQ 扩展,并且我知道您可以使用 HQL 生成器添加扩展属性/方法。但根据我的理解,这只能让我说:

var query = session.Query<Foo>().Where(f => f.Bar.OptionRecompile()).ToList();
Run Code Online (Sandbox Code Playgroud)

这并不理想,而且看起来更像是一种黑客行为。如果有人可以提供帮助,我将不胜感激。谢谢

linq nhibernate linq-to-nhibernate

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

在协变接口上设置属性

我有以下协变接口:

public interface IHierarchical<out T> where T : IHierarchical<T> {
    T Parent { get; }
    IEnumerable<T> Children { get; }
}
Run Code Online (Sandbox Code Playgroud)

然后我有以下从上面的接口派生的接口:

public interface ISiteMapNode<T> : ISiteMapNode where T : ISiteMapNode<T> { }

public interface ISiteMapNode : IHierarchical<ISiteMapNode> {
    string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

最后我有以下实现:

public class SiteMapNode : ISiteMapNode<SiteMapNode> {
    public string Name { get; set; }
    public ISiteMapNode Parent { get; }
    public IEnumerable<ISiteMapNode> Children { get; }
}
Run Code Online (Sandbox Code Playgroud)

现在我有一个方法,它接受 ISiteMapNode 类型的参数并尝试设置 Parent 属性。显然这不起作用,因为 Parent 属性是只读的。我必须删除 …

c# covariance

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