小编Nat*_*222的帖子

Dispose()和Ninject指南

所以,我有一个从WCF服务公开的方法:

public GetAllCommentsResponse GetAllComments(GetAllCommentsRequest request)
{
    var response = new GetAllCommentsResponse();

    using(_unitOfWork)
        try
        {
            Guard.ArgNotNull(request, "request");

            var results = _unitOfWork.CommentRepository.Get(d => d.Id > 0).ToArray();

            //... Do rest of stuff here
        }
        catch (Exception ex)
        {
            response.Success = false;
            response.FailureInformation = ex.Message;
            Logger.LogError("GetAllComments Method Failed", ex);
        }

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

我有一个全局DataUnitOfWork对象(实现IDisposable),当服务调用进来时,Ninject通过构造函数参数实例化.当调试时,如果我使用

using(_unitOfWork)
Run Code Online (Sandbox Code Playgroud)

超出范围后,_unitOfWork对象立即被释放,然后被Ninject再次调用(尽管它被标记为已丢弃,因此没有任何反应.)如果没有using语句,Ninject将处理处理.

长话短说,这是否有一般的经验法则?在我阅读的所有内容似乎表明永远不会使用它,或者在某些折衷的情况下使用它之后,我一直害怕整个IDisposable的东西,但它总是让我感到困惑.

任何输入都表示赞赏.

哦,当我在这里打字时,为什么在处理时确实有GC.SuppressFinalize()的调用?Dispose和Finalize有何不同?

.net c# garbage-collection idisposable ninject

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

C#,最快(最好?)识别目录数组中的重复文件的方法

我想递归几个目录,并在n个目录之间找到重复的文件.

我在这方面的下意识是拥有一个全局哈希表或一些其他数据结构来保存我找到的每个文件; 然后检查每个后续文件以确定它是否在"主"文件列表中.显然,我不认为这会非常有效,而且"必须有更好的方法!" 我的大脑里一直响个不停.

任何关于更好地处理这种情况的建议都将受到赞赏.

c# comparison file

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

C#应用程序调用C++方法,错误:PInvoke:无法返回变体

我试图找出如何将复杂对象从C++ DLL返回到调用C#应用程序.我有一个简单的方法,返回一个工作正常的int.谁能告诉我我做错了什么?

C#应用:

class Program
{
    static void Main(string[] args)
    {
        // Error on this line: "PInvoke: Cannot return variants"
        var token = LexerInterop.next_token();
    }
}
Run Code Online (Sandbox Code Playgroud)

C#LexerInterop代码:

public class LexerInterop
{
    [DllImport("Lexer.dll")]
    public static extern object next_token();

    [DllImport("Lexer.dll", CallingConvention = CallingConvention.Cdecl)]
    public static extern int get_int(int i);
}
Run Code Online (Sandbox Code Playgroud)

C++ Lexer.cpp

extern "C" __declspec(dllexport) Kaleidoscope::Token get_token()
{
    int lastChar = ' ';
    Kaleidoscope::Token token = Kaleidoscope::Token();

    while(isspace(lastChar))
    {
        lastChar = getchar();
    }

    ... Remainder of method body removed ...

    return token; …
Run Code Online (Sandbox Code Playgroud)

c# c++ pinvoke interop

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

没有名为"ASP.NET 4.6.81.0"的EventLog源.此模块需要.NET Framework 2.0

我刚安装了VS 2015社区,在尝试访问IIS中托管的ASP.NET应用程序(使用ASP.NET v4.0应用程序池)时,我收到了该错误消息.

我刚下载了.NET Framework 4.6脱机安装程序,它识别出安装并给了我修复或删除它的选项.我选择修复安装,但它没有修复任何东西.

我还有其他选择吗?

c# asp.net visual-studio

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

从通用方法返回IQueryable <T>

所以,我有以下代码:

    private readonly Dictionary<string, IGame> _gameLookup = new Dictionary<string, IGame>();

    public T LookupGame<T>(string name) where T : IGame
    {
        if (name == null) throw new ArgumentNullException("name");
        Type t = typeof(T);

        if (_gameLookup.Any(d => d.Key == name))
        {
            return (T)_gameLookup[name];
        }

        var newInstance = (T)AppDomain.CurrentDomain.GetUnityContainer().Resolve(t, name);

        if (newInstance != null)
        {
            _gameLookup.Add(name, newInstance);

            return newInstance;
        }

        return default(T);
    }

    public IQueryable<T> ListGames<T>() where T : IGame
    {
        var games = _gameLookup.Where(d => d.GetType() == typeof (T));

        return (IQueryable<T>) games;
    }
Run Code Online (Sandbox Code Playgroud)

我的问题是ListGames方法.(LookupGame方法只是包含在我正在做的事情的某些上下文中.) …

c# generics iqueryable

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

如何确定是否使用' - >'与'.'

我正在关注D2D示例,其中出现了以下代码:

    if(!(D2D1_WINDOW_STATE_OCCLUDED & m_renderTarget->CheckWindowState()))
    {
        m_renderTarget->BeginDraw();

        Draw();

        if(m_renderTarget->EndDraw() == D2DERR_RECREATE_TARGET)
        {
            m_renderTarget.Reset();
            Invalidate();
        }
    }
Run Code Online (Sandbox Code Playgroud)

我注意到m_renderTarget使用了 - >(我忘记了它的名字),后来又使用了点运算符.出于某种原因,我认为使用只能使用一个或另一个,具体取决于它是引用类型还是值类型.显然我认为错了,但找不到关于何时使用每个操作员的任何信息(或更多关于点,每个操作员的目的.)

任何澄清将不胜感激.

c++ windows direct2d

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

将List转换为Dictionary <string,string []>

我有一个简单的自定义对象:

class CertQuestion
{
    public string Field {get;set;}
    public string Value {get;set;}
}
Run Code Online (Sandbox Code Playgroud)

随后我发现自己在一些代码中使用了List.我正在试图弄清楚如何将CertQuestions列表格式化为相应的字典,并将类似的字段名称组合在一起.例如,给出以下列表:

        List<CertQuestion> certQuestions = new List<CertQuestion>()
            {
                new CertQuestion("Key", "Value1"),
                new CertQuestion("Key", "Value2"),
                new CertQuestion("Key2", "Value"),
                new CertQuestion("Key2", "Value2")
            };
Run Code Online (Sandbox Code Playgroud)

我想将它(尝试使用LINQ)转换为带有两个条目的字典,例如

{{"Key", "Value1, Value2"}, {"Key2", "Value, Value2"}}
Run Code Online (Sandbox Code Playgroud)

.net c#

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